Heim >Backend-Entwicklung >Golang >Wie ahmt der Pass-by-Value-Mechanismus von Go Pass-by-Reference mithilfe von Zeigern nach?
Übergabe per Referenz und Wert in Go-Funktionen verstehen
In Go kann das Konzept der Übergabe per Referenz und Wert zunächst verwirrend sein. Zur Verdeutlichung ist anzumerken, dass Go in erster Linie die Wertübergabe unterstützt. Wenn jedoch ein Zeiger auf ein Objekt übergeben wird, imitiert dies die Übergabe als Referenz.
Um dies zu verstehen, betrachten Sie die folgende Java-Funktion:
databaseFunction(DatabaseType db) { // do something }
In diesem Code ist die DatabaseType-Instanz db wird als Wert an die Funktion übergeben. In Go könnte es jedoch wie folgt dargestellt werden:
func PutTasks(db *sql.DB) echo.HandlerFunc { }
Im Go-Beispiel impliziert das Sternchen * vor sql.DB, dass die Funktion einen Zeiger auf eine sql.DB-Instanz erwartet. Dies liegt daran, dass in Go Werte von Zeigertypen Adressen enthalten.
Laut dem von Ihnen erwähnten Spickzettel gibt die Syntax func PrintPerson(p *Person) an, dass die Funktion nur eine Zeigeradresse auf ein Person-Objekt akzeptiert. Der Grund für die Verwendung eines Zeigers besteht darin, der Funktion zu ermöglichen, das ursprünglich übergebene Objekt zu ändern.
Zur weiteren Veranschaulichung betrachten Sie den folgenden Go-Code:
func someFunc(x *int) { *x = 2 // Whatever variable caller passed in will now be 2 y := 7 x = &y // has no impact on the caller because we overwrote the pointer value! }
In diesem Beispiel , x ist ein Zeiger auf eine ganze Zahl. Indem wir es dereferenzieren, können wir den Wert, auf den es verweist, direkt ändern. Die erneute Zuweisung von x, um auf eine andere Variable zu zeigen, hat jedoch keine Auswirkungen auf den Aufrufer, da er nur eine Kopie der Zeigervariablen hat, nicht den Wert, auf den sie ursprünglich gezeigt hat.
Daher bietet die Verwendung von Zeigern einen Mechanismus zum Teilen von Werten zwischen dem Aufrufer und der Funktion, sodass innerhalb der Funktion vorgenommene Änderungen auf das ursprüngliche Objekt zurückgespiegelt werden können.
Das obige ist der detaillierte Inhalt vonWie ahmt der Pass-by-Value-Mechanismus von Go Pass-by-Reference mithilfe von Zeigern nach?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!