Le passage de « ceci » par valeur dégrade-t-il les performances dans les méthodes Go ?
Contrairement au C où les arguments de fonction transmis par valeur peuvent entraîner des performances significatives pénalités dues à la copie de variables, les récepteurs de méthodes de Go suivent un paradigme différent.
Dans Go, les récepteurs de méthodes sont de simples récepteurs syntaxiques commodités. Comme démontré ci-dessous :
type Something struct { Value int } func (s *Something) ChangeValue(n int) { s.Value = n } func main() { o := new(Something) fmt.Println(o.Value) // Prints 0 o.ChangeValue(8) // Changes o's value to 8 fmt.Println(o.Value) // Prints 8 (*Something).ChangeValue(o, 16) // Same as calling o.ChangeValue(16) fmt.Println(o.Value) // Prints 16 }
Remarquez que le récepteur dans ChangeValue est un pointeur, ce qui le rend similaire à une référence en C . Si le récepteur était un type valeur, il ne permettrait pas la mutation de valeur.
Par conséquent, l'approche du récepteur de pointeur de Go garantit l'encapsulation et empêche la copie de l'intégralité de « cette » instance, contrairement à la pénalité de performances observée dans C/C. pour passer des arguments par valeur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!