Sobes.tech
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:

  1. 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.
  2. 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.
  3. Nil vērtības: Metodes ar norādītāja saņēmēju var tikt izsauktas uz nil norā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
}