Die folgende Spalte des golang-Tutorials wird Ihnen eine detaillierte Erklärung des Unterschieds zwischen dem Empfänger der Methode in golang geben, der ein Zeiger ist und kein Zeiger ist. Ich hoffe, dass er für Freunde hilfreich sein wird brauchen!
Kürzlich fragte mich ein Student auf der Website, was der Unterschied zwischen dem Empfänger einer Methode in Golang ist, der ein Zeiger ist und kein Zeiger. Hier werde ich es auf einfache und leicht verständliche Weise erklären -Verstehen Sie, wie Sie Schülern helfen können, die gerade Golang gelernt haben.
Ich denke, einige Schüler haben es bereits verstanden Wenn die tatsächlichen Parameter übergeben werden, obwohl sie keine Zeiger sind, wird der Wert jedes Mal kopiert, wenn TestValue() aufgerufen 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) }Nach dem Login kopierensehr einfach zu verstehen? Fügen wir nun den Code hinzu, um den Unterschied zwischen Zeigern und Nicht-Zeigern zu erkennen.
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) }Nach dem Login kopieren
Was wird dann das Ergebnis sein, wenn der Wert geändert wird?
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 auf solche Probleme beim Programmieren stoßen.
Was ist also die Beziehung zwischen diesen Methodensätzen? Hier leihe ich mir Qyuhens Lesenotizen in Golang aus (https://github.com/qyuhen/book). Empfehlen Sie Freunden, die Golang mögen, die Lektüre dieses Buches, das sehr hilfreich ist, um das Verständnis von Golang zu vertiefen.• Die Menge der Methoden vom Typ
T enthält alle Empfänger-T +
• 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-Methoden.• Unabhängig von der Einbettung von T oder
T enthält der Satz der S-Methoden immer T + *T-Methoden.
FazitObwohl 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.
Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen dem Empfänger einer Methode in Golang, der ein Zeiger ist und nicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!