Vorwort
Kürzlich habe ich eine Website gelesen und ein Klassenkamerad fragte, was der Unterschied zwischen dem Empfänger einer Methode in ist Golang ist ein Zeiger und kein Zeiger. Hier wird eine leicht verständliche Methode erklärt, um Schülern zu helfen, die gerade Golang gelernt haben. Solange Sie dieses Prinzip verstehen. Sie können die oben genannten Probleme im Grunde verstehen. Empfänger Es ist der erste tatsächliche Parameter, der implizit übergeben wird.
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) }
Ist es jetzt leicht zu verstehen? Was ist der Unterschied zwischen Zeigern und Nicht-Zeigern?
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) }
Ich denke, einige Schüler haben verstanden, dass der Wert kopiert wird, wenn der tatsächliche Parameter übergeben wird, wenn er kein Zeiger ist Wert wird kopiert.
Was wird also das Ergebnis sein, wenn es darum geht, den Wert zu ändern?T enthält alle Empfänger-T +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() }Also müssen alle Schüler aufpassen, wenn sie beim Programmieren auf solche Probleme stoßen Ich habe Qyuhens Notizen aus dem Golang-Studium ausgeliehen, und ich empfehle auch Freunden, die Golang mögen, es zu lesen. Dieses Buch ist eine große Hilfe bei der Vertiefung des Verständnisses von Golang.
• Die Menge der Methoden vom Typ
T-Methoden.
• Wenn Typ S ein anonymes Feld T enthält, dann enthält der Methodensatz von S T Methoden.• Wenn Typ S das anonyme Feld
T enthält, dann enthält der Methodensatz von S T +T-Methoden.
• Unabhängig von der Einbettung von T oder
S-Methoden immer T + *T-Methoden.
Fazit
Obwohl Golang einfach und leicht zu verwenden ist, birgt es dennoch viele Fallstricke bei der Verwendung von Golang, die später im Blog erwähnt werden.