Junior
Que signifie la présence d'une étoile à côté du récepteur dans Go?
sobes.tech IA
Réponse de l'IA
La présence d'une étoile (*) dans un récepteur en Go indique que la méthode est appelée sur un pointeur vers une instance du type, et non sur la valeur du type.
Les principales implications sont :
- Changement d'état : Une méthode avec un récepteur pointeur peut modifier les champs de la structure (ou autre type) vers laquelle le pointeur pointe. Sans l'étoile, la méthode travaille avec une copie de la valeur, et les modifications dans la méthode n'affectent pas l'original.
- Performance : Passer un pointeur peut être plus efficace que de passer une grande structure par valeur, car seule l'adresse mémoire est transmise, pas toute la structure.
- Valeurs nil : Les méthodes avec récepteur pointeur peuvent être appelées sur des pointeurs
nil, ce qui peut être utile pour gérer gracieusement ces cas.
Exemple :
package main
import "fmt"
type Counter struct {
value int
}
// Méthode avec récepteur par valeur : ne modifie pas le Counter original
func (c Counter) IncrementByValue() {
c.value++ // Seule la copie est modifiée
}
// Méthode avec récepteur pointeur : modifie le Counter original
func (c *Counter) IncrementByPointer() {
c.value++ // La valeur originale est modifiée
}
func main() {
c1 := Counter{value: 0}
c1.IncrementByValue()
fmt.Println("Valeur après IncrementByValue :", c1.value) // Affichera 0
c2 := Counter{value: 0}
c2.IncrementByPointer()
fmt.Println("Valeur après IncrementByPointer :", c2.value) // Affichera 1
}