Avant-propos
I J'ai récemment lu un site Web et un étudiant a posé une question. Quelle est la différence entre le récepteur d'une méthode en golang étant un pointeur et ne pas être un pointeur. Ici, je vais l'expliquer d'une manière simple et facile à comprendre pour aider les étudiants qui le souhaitent. Je viens d'apprendre le golang.
Quelle est la méthode
En fait Tant que vous comprenez ce principe, vous pouvez essentiellement comprendre les problèmes mentionnés ci-dessus. La méthode est en fait une fonction spéciale, et le récepteur est le premier argument transmis implicitement
Est-ce facile à comprendre, ajoutons maintenant du code pour voir la différence ? entre les pointeurs et les non-pointeurs.Par exemple
type test struct{ name string } func (t test) TestValue() { } func (t *test) TestPointer() { } func main(){ t := test{} m := test.TestValue m(t) m1 := (*test).TestPointer m1(&t) }Copier après la connexion
type test struct{ name string } func (t test) TestValue() { fmt.Printf("%p\n", &t) } func (t *test) TestPointer() { fmt.Printf("%p\n", t) } func main(){ t := test{} //0xc42000e2c0 fmt.Printf("%p\n", &t) //0xc42000e2e0 m := test.TestValue m(t) //0xc42000e2c0 m1 := (*test).TestPointer m1(&t) }
Alors quel sera le résultat si cela implique l'opération de modification de la valeur
type test struct{ name string } func (t test) TestValue() { fmt.Printf("%s\n",t.name) } func (t *test) TestPointer() { fmt.Printf("%s\n",t.name) } func main(){ t := test{"wang"} //这里发生了复制,不受后面修改的影响 m := t.TestValue t.name = "Li" m1 := (*test).TestPointer //Li m1(&t) //wang m() }
Donc, tous les étudiants doivent faire attention lorsqu'ils rencontrent de tels problèmes en programmation.
Qu'est-ce que c'est ? la relation entre ces ensembles de méthodes ? Ici, j'ai emprunté les notes de lecture de qyuhen en golang, qui sont également recommandées ici. Les amis qui aiment le golang devraient lire ce livre, qui sera d'une grande aide pour approfondir leur compréhension du golang
<.>• L'ensemble de méthodes de type T contient toutes les méthodes du récepteur T.
• L'ensemble des méthodes de type
T.• Si le type S contient un champ anonyme T, alors l'ensemble de méthodes de S contient T méthodes.
Bien que Golang soit simple et facile à utiliser, il présente encore de nombreux pièges L'auteur a rencontré de nombreux pièges dans le processus d'utilisation de Golang, qui seront mentionnés dans le blog. plus tard. Tout le monde est le bienvenu. Discutons ensemble.
• Si le type S contient le champ anonyme T, alors l'ensemble de méthodes de S contient les méthodes T + T.
• Indépendamment de l'intégration de T ou
T, l'ensemble des méthodes S contient toujours les méthodes T + *T.
Conclusion