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 { // ... }
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 }
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!