Junior
Ką reiškia žvaigždutės buvimas prie imtuvo Go?
sobes.tech AI
Atsakymas iš AI
Go kalboje žvaigždutė (*) prie priimančiojo reiškia, kad metodas kviečiamas nuorodos į egzempliorių tipą, o ne pačios reikšmės.
Pagrindinės pasekmės:
- Būsenos keitimas: Metodas su nuorodos priimančiuoju gali keisti struktūros (ar kito tipo) laukus, į kuriuos nurodo nuoroda. Be žvaigždutės, metodas dirba su kopija ir pakeitimai viduje neatsispindi originalui.
- Veiksmingumas: Nuorodos perdavimas gali būti efektyvesnis nei didelės struktūros perdavimas kaip reikšmė, nes perduodama tik atminties adresas, o ne visa struktūra.
- Nil reikšmės: Metodai su nuorodos priimančiuoju gali būti kviečiami su
nilnuorodomis, kas gali būti naudinga tvarkant tokias situacijas.
Pavyzdys:
package main
import "fmt"
type Counter struct {
value int
}
// Metodas su reikšmės priimančiuoju: nekeičia originalaus Counter
func (c Counter) IncrementByValue() {
c.value++ // keičiasi tik kopija
}
// Metodas su nuorodos priimančiuoju: keičia originalų Counter
func (c *Counter) IncrementByPointer() {
c.value++ // keičiasi originali reikšmė
}
func main() {
c1 := Counter{value: 0}
c1.IncrementByValue()
fmt.Println("Reikšmė po IncrementByValue:", c1.value) // išves 0
c2 := Counter{value: 0}
c2.IncrementByPointer()
fmt.Println("Reikšmė po IncrementByPointer:", c2.value) // išves 1
}