Junior
Čo znamená prítomnosť hviezdičky pri prijímači v Go?
sobes.tech AI
Odpoveď od AI
Prítomnosť hviezdičky (*) u príjemcu v Go znamená, že metóda je volaná na ukazovateli na inštanciu typu, a nie na samotnej hodnote typu.
Hlavné dôsledky sú:
- Zmena stavu: Metóda s ukazovateľom príjemcom môže meniť polia štruktúry (alebo iného typu), na ktorú ukazuje ukazovateľ. Bez hviezdičky, metóda pracuje s kópiou hodnoty, a zmeny vnútri metódy sa neprejavia na origináli.
- Výkon: Odovzdanie ukazovateľa môže byť efektívnejšie ako odovzdanie veľkej štruktúry hodnotou, pretože sa odovzdáva iba adresa pamäte, nie celá štruktúra.
- Nil hodnoty: Metódy s ukazovateľom príjemcom môžu byť volané na
nilukazovateľoch, čo môže byť užitočné pre elegantné spracovanie takýchto prípadov.
Príklad:
package main
import "fmt"
type Counter struct {
value int
}
// Metóda s hodnotovým príjemcom: nemení pôvodný Counter
func (c Counter) IncrementByValue() {
c.value++ // Mění se pouze kopie
}
// Metóda s ukazovateľom: mení pôvodný Counter
func (c *Counter) IncrementByPointer() {
c.value++ // Pôvodná hodnota sa mení
}
func main() {
c1 := Counter{value: 0}
c1.IncrementByValue()
fmt.Println("Hodnota po IncrementByValue:", c1.value) // Vypíše 0
c2 := Counter{value: 0}
c2.IncrementByPointer()
fmt.Println("Hodnota po IncrementByPointer:", c2.value) // Vypíše 1
}