Heim Backend-Entwicklung Golang Wie verwende ich die Übergabe von Funktionsargumenten in Go?

Wie verwende ich die Übergabe von Funktionsargumenten in Go?

May 11, 2023 pm 05:00 PM
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:

  1. Der Unterschied zwischen Werttypen und Referenztypen

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

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.

  1. Parameterübergabe vom Zeigertyp

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

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.

  1. Verwenden Sie ..., um Parameter variabler Länge darzustellen.

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

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!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie kann ich Zeitstempel mithilfe regulärer Ausdrücke in Go abgleichen? Wie kann ich Zeitstempel mithilfe regulärer Ausdrücke in Go abgleichen? Jun 02, 2024 am 09:00 AM

In Go können Sie reguläre Ausdrücke verwenden, um Zeitstempel abzugleichen: Kompilieren Sie eine Zeichenfolge mit regulären Ausdrücken, z. B. die, die zum Abgleich von ISO8601-Zeitstempeln verwendet wird: ^\d{4}-\d{2}-\d{2}T \d{ 2}:\d{2}:\d{2}(\.\d+)?(Z|[+-][0-9]{2}:[0-9]{2})$ . Verwenden Sie die Funktion regexp.MatchString, um zu überprüfen, ob eine Zeichenfolge mit einem regulären Ausdruck übereinstimmt.

Wie sende ich Go WebSocket-Nachrichten? Wie sende ich Go WebSocket-Nachrichten? Jun 03, 2024 pm 04:53 PM

In Go können WebSocket-Nachrichten mit dem Paket gorilla/websocket gesendet werden. Konkrete Schritte: Stellen Sie eine WebSocket-Verbindung her. Senden Sie eine Textnachricht: Rufen Sie WriteMessage(websocket.TextMessage,[]byte("message")) auf. Senden Sie eine binäre Nachricht: Rufen Sie WriteMessage(websocket.BinaryMessage,[]byte{1,2,3}) auf.

Detaillierte Erläuterung der C++-Funktionsparameter: Implementierungsmethoden, Vor- und Nachteile der unbestimmten Parameterübergabe Detaillierte Erläuterung der C++-Funktionsparameter: Implementierungsmethoden, Vor- und Nachteile der unbestimmten Parameterübergabe Apr 28, 2024 am 09:48 AM

Unbestimmte C++-Parameterübergabe: implementiert durch den ...-Operator, der eine beliebige Anzahl zusätzlicher Parameter akzeptiert. Zu den Vorteilen gehören Flexibilität, Skalierbarkeit und vereinfachter Code. Zu den Nachteilen zählen Leistungsaufwand, Debugging-Schwierigkeiten und Typsicherheit. Zu den gängigen praktischen Beispielen gehören printf() und std::cout, die va_list verwenden, um eine variable Anzahl von Parametern zu verarbeiten.

Der Unterschied zwischen Golang und Go-Sprache Der Unterschied zwischen Golang und Go-Sprache May 31, 2024 pm 08:10 PM

Go und die Go-Sprache sind unterschiedliche Einheiten mit unterschiedlichen Eigenschaften. Go (auch bekannt als Golang) ist bekannt für seine Parallelität, schnelle Kompilierungsgeschwindigkeit, Speicherverwaltung und plattformübergreifende Vorteile. Zu den Nachteilen der Go-Sprache gehören ein weniger umfangreiches Ökosystem als andere Sprachen, eine strengere Syntax und das Fehlen dynamischer Typisierung.

Wie vermeidet man Speicherlecks bei der technischen Leistungsoptimierung von Golang? Wie vermeidet man Speicherlecks bei der technischen Leistungsoptimierung von Golang? Jun 04, 2024 pm 12:27 PM

Speicherlecks können dazu führen, dass der Speicher des Go-Programms kontinuierlich zunimmt, indem: Ressourcen geschlossen werden, die nicht mehr verwendet werden, wie z. B. Dateien, Netzwerkverbindungen und Datenbankverbindungen. Verwenden Sie schwache Referenzen, um Speicherlecks zu verhindern, und zielen Sie auf Objekte für die Garbage Collection ab, wenn sie nicht mehr stark referenziert sind. Bei Verwendung von Go-Coroutine wird der Speicher des Coroutine-Stapels beim Beenden automatisch freigegeben, um Speicherverluste zu vermeiden.

Detaillierte Erläuterung der C++-Funktionsparameter: Wesen und Vorsichtsmaßnahmen des ausgehenden Mechanismus Detaillierte Erläuterung der C++-Funktionsparameter: Wesen und Vorsichtsmaßnahmen des ausgehenden Mechanismus Apr 27, 2024 pm 12:00 PM

Es gibt zwei Möglichkeiten, Funktionsparameter in C++ zu übergeben: Aufruf per Wert (der sich nicht auf die tatsächlichen Parameter auswirkt) und Aufruf per Referenz (der sich auf die tatsächlichen Parameter auswirkt). Ausgehende Parameter werden per Referenz oder Zeiger übergeben, und die Funktion kann den Wert an den Aufrufer übergeben, indem sie die Variable ändert, auf die die Parameterreferenz oder der Zeiger zeigt. Bitte beachten Sie bei der Verwendung: Die ausgehenden Parameter müssen eindeutig deklariert sein, können nur einem tatsächlichen Parameter entsprechen und dürfen nicht auf lokale Variablen innerhalb der Funktion verweisen. Achten Sie beim Aufruf durch Übergabe eines Zeigers darauf, wilde Zeiger zu vermeiden.

Wie verwende ich den Fehler-Wrapper von Golang? Wie verwende ich den Fehler-Wrapper von Golang? Jun 03, 2024 pm 04:08 PM

In Golang können Sie mit Fehler-Wrappern neue Fehler erstellen, indem Sie Kontextinformationen an den ursprünglichen Fehler anhängen. Dies kann verwendet werden, um die von verschiedenen Bibliotheken oder Komponenten ausgelösten Fehlertypen zu vereinheitlichen und so das Debuggen und die Fehlerbehandlung zu vereinfachen. Die Schritte lauten wie folgt: Verwenden Sie die Funktion „errors.Wrap“, um die ursprünglichen Fehler in neue Fehler umzuwandeln. Der neue Fehler enthält Kontextinformationen zum ursprünglichen Fehler. Verwenden Sie fmt.Printf, um umschlossene Fehler auszugeben und so mehr Kontext und Umsetzbarkeit bereitzustellen. Wenn Sie verschiedene Fehlertypen behandeln, verwenden Sie die Funktion „errors.Wrap“, um die Fehlertypen zu vereinheitlichen.

Eine Anleitung zum Unit-Testen gleichzeitiger Go-Funktionen Eine Anleitung zum Unit-Testen gleichzeitiger Go-Funktionen May 03, 2024 am 10:54 AM

Das Testen gleichzeitiger Funktionen in Einheiten ist von entscheidender Bedeutung, da dies dazu beiträgt, ihr korrektes Verhalten in einer gleichzeitigen Umgebung sicherzustellen. Beim Testen gleichzeitiger Funktionen müssen grundlegende Prinzipien wie gegenseitiger Ausschluss, Synchronisation und Isolation berücksichtigt werden. Gleichzeitige Funktionen können Unit-Tests unterzogen werden, indem Rennbedingungen simuliert, getestet und Ergebnisse überprüft werden.

See all articles