Sobes.tech
Junior

Wat betekent de aanwezigheid van een ster naast de ontvanger in Go?

sobes.tech AI

Antwoord van AI

De aanwezigheid van een sterretje (*) bij een receiver in Go betekent dat de methode wordt aangeroepen op een pointer naar een instantie van het type, en niet op de waarde van het type.

De belangrijkste gevolgen hiervan zijn:

  1. Verandering van toestand: Een methode met een pointer-ontvanger kan de velden van de structuur (of een ander type) waarnaar de pointer wijst, wijzigen. Zonder sterretje werkt de methode met een kopie van de waarde, en worden wijzigingen binnen de methode niet weerspiegeld op het origineel.
  2. Prestaties: Het doorgeven van een pointer kan efficiënter zijn dan het doorgeven van een grote structuur per waarde, omdat alleen het geheugenadres wordt doorgegeven, niet de hele structuur.
  3. Nil-waarden: Methoden met een pointer-ontvanger kunnen worden aangeroepen op nil-pointers, wat handig kan zijn voor elegante afhandeling van dergelijke gevallen.

Voorbeeld:

package main

import "fmt"

type Counter struct {
	value int
}

// Methode met waarde-ontvanger: wijzigt de originele Counter niet
func (c Counter) IncrementByValue() {
	c.value++ // Alleen de kopie wordt gewijzigd
}

// Methode met pointer-ontvanger: wijzigt de originele Counter
func (c *Counter) IncrementByPointer() {
	c.value++ // De originele waarde wordt gewijzigd
}

func main() {
	c1 := Counter{value: 0}
	c1.IncrementByValue()
	fmt.Println("Waarde na IncrementByValue:", c1.value) // Drukt 0 af

	c2 := Counter{value: 0}
	c2.IncrementByPointer()
	fmt.Println("Waarde na IncrementByPointer:", c2.value) // Drukt 1 af
}