Heim > Artikel > Backend-Entwicklung > Wie verwende ich die Übergabe von Funktionsargumenten in Go?
Go ist eine stark typisierte Programmiersprache und ihre Funktionsparameter werden als Wert übergeben. Das bedeutet, dass Sie bei der Übergabe eines Parameters an eine Funktion tatsächlich eine Kopie des Parameterwerts erstellen und diesen Wert zur Verarbeitung an die Funktion übergeben. Daher müssen Sie bei der Verwendung der Funktionsparameterübergabe in Go auf die folgenden Punkte achten:
In Go, mit Ausnahme des Basisdatentyps, der ein Werttyp ist, alle Datentypen sind Referenztypen. Wenn Daten vom Werttyp als Funktionsparameter übergeben werden, wird eine Kopie des Werts an die Funktion übergeben. Wenn Daten vom Referenztyp als Funktionsparameter übergeben werden, wird die Adresse der Daten im Speicher übergeben.
Schauen wir uns zum Beispiel den Parameterübergabeprozess des Werttyps bzw. des Referenztyps an:
package main import "fmt" func main() { // 值类型参数传递 var a = 10 fmt.Println("Before call func: ", a) // 输出 10 changeByVal(a) fmt.Println("After call func: ", a) // 输出 10 // 引用类型参数传递 var b = []int{1, 2, 3} fmt.Println("Before call func: ", b) // 输出 [1 2 3] changeByRef(b) fmt.Println("After call func: ", b) // 输出 [4 5] } // 值类型参数传递 func changeByVal(num int) { num = 100 } // 引用类型参数传递 func changeByRef(arr []int) { arr[0] = 4 arr[1] = 5 }
Wir können sehen, dass im Fall der Parameterübergabe vom Werttyp der Parameterwert innerhalb der Funktion auf 100 geändert wird, aber außerhalb Die a-Variable bleibt davon unberührt. Bei der Übergabe von Referenztypparametern wird der Parameter innerhalb der Funktion geändert, und die tatsächlichen Daten außerhalb der Funktion sind ebenfalls betroffen.
Wenn wir die Referenztypdaten ändern möchten, können wir die Parameterübergabe vom Zeigertyp verwenden. Pointer ist ein Datentyp, der die Adresse einer Variablen speichert, die auch in Go als Wert übergeben wird.
Wir können den &-Operator verwenden, um die Adresse einer Variablen abzurufen, und den *-Operator, um die in der Adresse gespeicherten Daten abzurufen.
Zum Beispiel:
package main import "fmt" func main() { var a = 10 var b *int b = &a fmt.Println("Before call func: ", a) // 输出 10 changeByPtr(b) fmt.Println("After call func: ", a) // 输出 100 } func changeByPtr(num *int) { *num = 100 }
Wir können feststellen, dass die Daten, auf die der Zeiger zeigt (ursprüngliche Variable a), innerhalb der Funktion geändert werden und auch die tatsächlichen externen Daten betroffen sind.
Wenn unsere Funktion Parameter variabler Länge empfangen muss, können wir auch ... verwenden, um sie darzustellen. Diese Syntax ähnelt args und kwargs in Python.
Zum Beispiel:
package main import "fmt" func main() { printNames("John", "Alice", "Bob") } func printNames(names ...string) { for _, name := range names { fmt.Println(name) } }
In diesem Beispiel definieren wir eine Funktion printNames mit Parametern variabler Länge und der empfangene Parametertyp ist string. Innerhalb der Funktion verwenden wir den Bereich, um alle Parameter zu durchlaufen und ihre Werte einzeln auszugeben.
Zusammenfassung
In Go erfolgt die Übergabe von Funktionsparametern nach Wert, daher müssen Sie auf den Unterschied zwischen Werttypen und Referenztypen achten. Wenn Sie Referenztypdaten ändern müssen, können Sie die Übergabe von Zeigertypparametern verwenden. Darüber hinaus können wir auch ... verwenden, um Parameter variabler Länge darzustellen, wodurch es für die Funktion einfacher wird, Parameter variabler Länge zu empfangen.
Das obige ist der detaillierte Inhalt vonWie verwende ich die Übergabe von Funktionsargumenten in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!