Heim > Backend-Entwicklung > Golang > Wie ahmt der Pass-by-Value-Mechanismus von Go Pass-by-Reference mithilfe von Zeigern nach?

Wie ahmt der Pass-by-Value-Mechanismus von Go Pass-by-Reference mithilfe von Zeigern nach?

Barbara Streisand
Freigeben: 2024-12-19 07:29:19
Original
280 Leute haben es durchsucht

How Does Go's Pass-by-Value Mechanism Mimic Pass-by-Reference Using Pointers?

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

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 {

}
Nach dem Login kopieren

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

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!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage