Heim > Backend-Entwicklung > Golang > Wie geht Go mit Referenz- und Wertübergabe um und warum wird das Sternchen (*) verwendet?

Wie geht Go mit Referenz- und Wertübergabe um und warum wird das Sternchen (*) verwendet?

DDD
Freigeben: 2024-12-24 00:35:12
Original
893 Leute haben es durchsucht

How Does Go Handle Pass by Reference and Value, and Why Use the Asterisk (*)?

Referenz- und Wertübergabe in Go-Funktionen

Das Konzept der Referenz- und Wertübergabe in Go kann verwirrend sein, insbesondere beim Vergleich zu anderen Sprachen wie Java. In diesem Artikel werden die Unterschiede erläutert und erklärt, warum Go die Verwendung des Sternchens (*) vor bestimmten Typen erfordert.

Übergabe per Referenz vs. Übergabe per Wert

Go übergibt technisch gesehen nur den Wert. Das bedeutet, dass beim Übergeben einer Variablen an eine Funktion eine Kopie dieser Variablen erstellt und übergeben wird. Alle an der Kopie innerhalb der Funktion vorgenommenen Änderungen wirken sich nicht auf die Originalvariable aus.

Wenn Sie jedoch einen Zeiger an ein Objekt übergeben, übergeben Sie effektiv einen Zeiger als Wert. Der Zeiger selbst ist ein Wert, der die Speicheradresse des Objekts enthält. Alle über den Zeiger am Objekt vorgenommenen Änderungen werden im Originalobjekt außerhalb der Funktion widergespiegelt.

Die Notwendigkeit des Sternchens (*)

Das Sternchen (*) ) in Go wird verwendet, um anzugeben, dass der Typ ein Zeiger auf den angegebenen Typ ist. Die folgende Funktion erwartet beispielsweise einen Zeiger auf ein sql.DB-Objekt:

func PutTasks(db *sql.DB) echo.HandlerFunc {
    // ...
}
Nach dem Login kopieren

Diese Syntax ist erforderlich, da Sie in Go explizit angeben müssen, ob Sie ein Objekt als Wert oder als Referenz übergeben. Wenn Sie das Sternchen nicht angeben, erwartet die Funktion einen sql.DB-Wert, der kein gültiger Typ für diese Funktion ist.

Warum Zeiger übergeben?

Die Übergabe eines Zeigers wird verwendet, wenn Sie den Wert zwischen dem Aufrufer und dem Funktionskörper teilen möchten. Alle innerhalb der Funktion am Objekt vorgenommenen Änderungen werden in der Variablen des Aufrufers widergespiegelt. Dies ist erforderlich, wenn Sie das Objekt des Aufrufers ändern möchten oder wenn Sie effizient auf große Objekte zugreifen müssen, ohne sie zu kopieren.

Beispiel

Bedenken Sie den folgenden Go-Code:

func someFunc(x *int) {
    *x = 2 // Modifies the original variable
    y := 7
    x = &y // Changes the pointer to point to a different variable
}
Nach dem Login kopieren

In diesem Beispiel nimmt die Funktion someFunc einen Zeiger auf eine Ganzzahl x. Innerhalb der Funktion wird der Zeiger dereferenziert (*), um die ursprüngliche Variable zu ändern. Darüber hinaus wird der Zeiger neu zugewiesen, um auf eine andere Variable y zu zeigen. Diese Änderung spiegelt sich in der Variablen des Aufrufers wider, da der Zeiger selbst innerhalb der Funktion geändert wurde.

Fazit

Die Übergabe von Referenz und Wert in Go ist ein grundlegendes Konzept, das es zu verstehen gilt . Das Sternchen (*) wird verwendet, um anzuzeigen, dass Sie einen Zeiger auf einen Typ übergeben, der es Ihnen ermöglicht, den Wert zwischen dem Aufrufer und dem Funktionskörper zu teilen. Dies ist besonders nützlich, um Aufrufervariablen zu ändern oder große Objekte effizient zu bearbeiten.

Das obige ist der detaillierte Inhalt vonWie geht Go mit Referenz- und Wertübergabe um und warum wird das Sternchen (*) verwendet?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage