Junior
Маънои мавҷудияти ситора дар назди қабулкунанда дар Go чист?
sobes.tech AI
Ҷавоб аз AI
Дар присутствияи ситораи (*) дар қабулкунандаи Go маънои онро дорад, ки усул дар бораи ишоратгари ба намунаи навъи, ва на дар қимати худи навъ, даъват мешавад.
Асосӣ таъсироти онҳост:
- Тамғзании ҳолат: Усул бо қабулкунандаи ишоратгари метавонад майдонҳои сохтор (ё дигар навъ) ки ишоратгари нишон медиҳад, тағир диҳад. Бе ситора, усул бо нусха кор мекунад, ва тағирот дар дохили усул ба оригинал таъсир намерасонад.
- Камхарҷӣ: Таслим кардани ишоратгари метавонад самараноктар бошад, нисбат ба таслим кардани сохтори калон бо қимат, зеро танҳо суроғаи хотира, на тамоми сохтор, дода мешавад.
- Қиматҳои 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 мебарорад
}