Junior
Mida tähendab tähe olemasolu vastuvõtja kõrval Go-s?
sobes.tech AI
Vastus AI-lt
Go keeles tähistab täheke (*) vastuvõtja juures, et meetod kutsutakse viit tüüpi eksemplarile, mitte väärtusele.
Peamised tagajärjed:
- Seisundi muutmine: Viit-vastuvõtjaga meetod võib muuta struktuuri (või muu tüübi) välju, millele viit näitab. Ilma tähekesteta töötab meetod koopia peal ning muudatused sees ei mõjuta algset.
- Jõudlus: Viite edastamine võib olla tõhusam kui suure struktuuri väärtusena edastamine, kuna edastatakse ainult mälu aadress, mitte kogu struktuur.
- Nil väärtused: Viit-vastuvõtja meetodeid saab kutsuda
nilviidetega, mis võib olla kasulik selliste juhtumite elegantseks käsitlemiseks.
Näide:
package main
import "fmt"
type Counter struct {
value int
}
// Väärtuse vastuvõtja meetod: ei muuda algset Counterit
func (c Counter) IncrementByValue() {
c.value++ // muudetakse ainult koopia
}
// Viit-vastuvõtja meetod: muudab algset Counterit
func (c *Counter) IncrementByPointer() {
c.value++ // algne väärtus muudetakse
}
func main() {
c1 := Counter{value: 0}
c1.IncrementByValue()
fmt.Println("Väärtus pärast IncrementByValue:", c1.value) // prindib 0
c2 := Counter{value: 0}
c2.IncrementByPointer()
fmt.Println("Väärtus pärast IncrementByPointer:", c2.value) // prindib 1
}