Methoden zur Parameterübergabe in Golang

巴扎黑
Freigeben: 2017-09-09 11:07:05
Original
2441 Leute haben es durchsucht

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
 }
}
Nach dem Login kopieren

Das Ergebnis der Funktionsausführung ist:


befor:[0 0 0]
after:[9 0 0]
Nach dem Login kopieren

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)
}
Nach dem Login kopieren

Ausführungsergebnis:


modifyFunc: 0x0
main: 0xc820049f30
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage