Parameterübergabe bedeutet, dass während des Übertragungsprozesses des Programms die tatsächlichen Parameter den Parameterwert an den entsprechenden formalen Parameter übergeben und dann der Prozess der Datenverarbeitung und -rückgabe in der Funktion implementiert wird. Der folgende Artikel stellt ihn hauptsächlich vor Für relevante Informationen zur Parameterübergabe in Golang können Freunde in Not darauf verweisen.
Vorwort
Dieser Artikel stellt hauptsächlich den relevanten Inhalt zur Golang-Parameterübergabe vor und teilt ihn als Referenz und zum Studium. Es gibt nicht viel Um dies zu sagen, werfen wir einen Blick auf die ausführliche Einführung.
Zur Parameterübergabe gibt es diesen Satz in der Golang-Dokumentation:
Nachdem sie ausgewertet wurden, werden die Parameter des Aufrufs als Wert an
übergeben
Funktion und die aufgerufene Funktion beginnt mit der Ausführung.
Funktionsaufrufparameter werden alle als Wert übergeben, nicht als Zeiger oder Referenz. Aus Tests wurde abgeleitet, dass, wenn die Parametervariable ein Zeiger oder ein impliziter Zeigertyp ist, die Parameterübergabemethode auch nach Wert erfolgt (Kopie des Zeigers selbst).
Slice ist eine der häufigsten Methoden Die verwendeten Datenstrukturen werden im Folgenden als Beispiel für den Parameterübergabemechanismus von Golang verwendet.
Slice-Datenstruktur ist wie folgt:
Beispielcode:
package main import "fmt" func main(){ slice := make([]int, 3, 5) fmt.Println("before:", slice) changeSliceMember(slice) fmt.Println("after:", slice) } func changeSliceMember(slice []int) { if len(slice) > 1 { slice[0] = 9 } }
Das Ergebnis der Funktionsausführung ist:
befor:[0 0 0] after:[9 0 0]
Erklärung:
Wie aus dem Datenstrukturdiagramm ersichtlich ist, kann Slice als Strukturtyp verstanden werden, einschließlich der Adresse des ersten Elements von Das zugrunde liegende Array, das Array len und die Kapazitätsfelder, das Slice-Objekt übergibt die Werte der drei Felder während des Parameterwertübertragungsprozesses. Tatsächlich unterscheidet sich die Speicheradresse des Slice in der Funktion „changeSliceMember“. Speicheradresse des Slice im Hauptfeld, aber die Feldwerte sind gleich, und der Wert des ersten Feldzeigers ist die Adresse des ersten Elements des zugrunde liegenden Arrays, sodass der Elementinhalt direkt geändert werden kann
kann zum Verständnis mit dem folgenden Code verglichen werden:
package main func main() { value := new(int) modifyFunc(value) println("main:", value) } func modifyFunc(value *int) { value = nil println("modifyFunc:", value) }
Ausführungsergebnis:
modifyFunc: 0x0 main: 0xc820049f30
Es ist ersichtlich, dass der Zeiger den Wert der Variablen value in main nicht geändert hat, selbst wenn der übergebene Wert lautet In „modifyFunc“ handelt es sich um einen Zeiger, der mit dem Wert in „main“ identisch ist, aber die beiden Objekte selbst sind zwei Objekte, die der Leser im Detail verstehen kann
Das obige ist der detaillierte Inhalt vonMethoden zur Parameterübergabe in Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!