Junior
Ko nozīmē zvaigznītes klātbūtne pie uztvērēja Go?
sobes.tech AI
Atbilde no AI
Go valodā zvaigznītes (*) klātbūtne pie saņēmēja nozīmē, ka metode tiek izsaukta uz norādītāju uz konkrēta tipa eksemplāru, nevis uz pašu vērtību.
Galvenās sekas:
- Stāvokļa maiņa: Metode ar norādītāja saņēmēju var mainīt struktūras (vai cita tipa) laukus, uz kuriem norāda norādītājs. Bez zvaigznītes metode strādā ar kopiju, un izmaiņas iekšā metodē neietekmē oriģinālu.
- Veiktspēja: Norādītāja nodošana var būt efektīvāka nekā liela struktūras nodošana pēc vērtības, jo tiek nodots tikai atmiņas adrese, nevis visa struktūra.
- Nil vērtības: Metodes ar norādītāja saņēmēju var tikt izsauktas uz
nilnorādītājiem, kas var būt noderīgi šādu gadījumu eleganta apstrāde.
Piemērs:
package main
import "fmt"
type Counter struct {
value int
}
// Metode ar vērtības saņēmēju: nemaina oriģinālo Counter
func (c Counter) IncrementByValue() {
c.value++ // tiek mainīta tikai kopija
}
// Metode ar norādītāja saņēmēju: maina oriģinālo Counter
func (c *Counter) IncrementByPointer() {
c.value++ // oriģinālā vērtība mainās
}
func main() {
c1 := Counter{value: 0}
c1.IncrementByValue()
fmt.Println("Vērtība pēc IncrementByValue:", c1.value) // izdrukās 0
c2 := Counter{value: 0}
c2.IncrementByPointer()
fmt.Println("Vērtība pēc IncrementByPointer:", c2.value) // izdrukās 1
}