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:
- Á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.
- 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.
- Nil értékek: Mutató fogadóval ellátott metódusokat meghívhatunk
nilmutató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
}