Sobes.tech
Junior

Маънои мавҷудияти ситора дар назди қабулкунанда дар Go чист?

sobes.tech AI

Ҷавоб аз AI

Дар присутствияи ситораи (*) дар қабулкунандаи Go маънои онро дорад, ки усул дар бораи ишоратгари ба намунаи навъи, ва на дар қимати худи навъ, даъват мешавад.

Асосӣ таъсироти онҳост:

  1. Тамғзании ҳолат: Усул бо қабулкунандаи ишоратгари метавонад майдонҳои сохтор (ё дигар навъ) ки ишоратгари нишон медиҳад, тағир диҳад. Бе ситора, усул бо нусха кор мекунад, ва тағирот дар дохили усул ба оригинал таъсир намерасонад.
  2. Камхарҷӣ: Таслим кардани ишоратгари метавонад самараноктар бошад, нисбат ба таслим кардани сохтори калон бо қимат, зеро танҳо суроғаи хотира, на тамоми сохтор, дода мешавад.
  3. Қиматҳои nil: Усулҳо бо қабулкунандаи ишоратгари метавонанд дар ишоратгари nil даъват шаванд, ки метавонад барои идоракунии одилона чунин ҳолатҳо кӯмак кунад.

Масалан:

package main

import "fmt"

type Counter struct {
	value int
}

// Усул бо қабулкунандаи қимат: тағир намедиҳад Counter-и аслӣ
func (c Counter) IncrementByValue() {
	c.value++ // танҳо нусха тағир меёбад
}

// Усул бо қабулкунандаи ишоратгари: тағир медиҳад Counter-и аслӣ
func (c *Counter) IncrementByPointer() {
	c.value++ // қимати аслӣ тағир меёбад
}

func main() {
	c1 := Counter{value: 0}
	c1.IncrementByValue()
	fmt.Println("Қимат пас аз IncrementByValue:", c1.value) // 0 мебарорад

	c2 := Counter{value: 0}
	c2.IncrementByPointer()
	fmt.Println("Қимат пас аз IncrementByPointer:", c2.value) // 1 мебарорад
}