Sobes.tech
Junior

Mit jelent a csillag jelenléte a vevő mellett a Go-ban?

sobes.tech MI

Válasz az MI-től

Go-ban egy * csillag jelenléte a fogadóban azt jelenti, hogy a metódus egy mutató egy példányára hívódik, nem pedig a típus értékére.

Ennek fő következményei:

  1. Állapotváltozás: Egy mutató fogadóval ellátott metódus módosíthatja a struktúra (vagy más típus) mezőit, amelyre a mutató mutat. Csillag nélkül a metódus a másolat értékével dolgozik, és a változások nem tükröződnek az eredetin.
  2. Teljesítmény: Egy mutató átadása hatékonyabb lehet, mint egy nagy struktúra érték szerinti átadása, mivel csak a memória címet adjuk át, nem az egész struktúrát.
  3. Nil értékek: Mutató fogadóval ellátott metódusokat meghívhatunk nil mutatókon, ami hasznos lehet az ilyen esetek elegáns kezelésében.

Példa:

package main

import "fmt"

type Counter struct {
	value int
}

// Metódus érték fogadóval: nem módosítja az eredeti Counter-t
func (c Counter) IncrementByValue() {
	c.value++ // Csak a másolat változik
}

// Mutató fogadóval: módosítja az eredeti Counter-t
func (c *Counter) IncrementByPointer() {
	c.value++ // Az eredeti érték módosul
}

func main() {
	c1 := Counter{value: 0}
	c1.IncrementByValue()
	fmt.Println("Az érték az IncrementByValue után:", c1.value) // 0-t ír ki

	c2 := Counter{value: 0}
	c2.IncrementByPointer()
	fmt.Println("Az érték az IncrementByPointer után:", c2.value) // 1-t ír ki
}