Go
Funktionen
Suche…
Einführung
Funktionen in Go stellen organisierten, wiederverwendbaren Code bereit, um eine Reihe von Aktionen auszuführen. Funktionen vereinfachen den Codierungsprozess, verhindern redundante Logik und machen Code leichter nachvollziehbar. In diesem Thema werden die Deklaration und Verwendung von Funktionen, Argumenten, Parametern, Rückgabeanweisungen und Gültigkeitsbereichen in Go beschrieben.
Syntax
- func () // Funktionstyp ohne Argumente und ohne Rückgabewert
- func (x int) int // akzeptiert eine ganze Zahl und gibt eine ganze Zahl zurück
- func (a, b int, z float32) bool // akzeptiert 2 ganze Zahlen, einen float und gibt einen booleschen Wert zurück
- func (Präfixzeichenfolge, Werte ... int) // "variadic" -Funktion, die eine Zeichenfolge und eine oder mehrere ganze Zahlen akzeptiert
- func () (int, bool) // Funktion, die zwei Werte zurückgibt
- func (a, b int, z float64, opt ... interface {}) (success bool) // akzeptiert 2 ganze Zahlen, einen float und eine oder mehrere Schnittstellen und gibt den genannten booleschen Wert zurück (der innerhalb der Funktion bereits initialisiert ist )
Grundlegende Erklärung
Eine einfache Funktion, die keine Parameter akzeptiert und keine Werte zurückgibt:
func SayHello() {
fmt.Println("Hello!")
}
Parameter
Eine Funktion kann optional einen Parametersatz deklarieren:
func SayHelloToMe(firstName, lastName string, age int) {
fmt.Printf("Hello, %s %s!\n", firstName, lastName)
fmt.Printf("You are %d", age)
}
Beachten Sie, dass der Typ für firstName
wird, da er mit lastName
identisch lastName
.
Rückgabewerte
Eine Funktion kann einen oder mehrere Werte an den Aufrufer zurückgeben:
func AddAndMultiply(a, b int) (int, int) {
return a+b, a*b
}
Der zweite Rückgabewert kann auch der Fehler var sein:
import errors
func Divide(dividend, divisor int) (int, error) {
if divisor == 0 {
return 0, errors.New("Division by zero forbidden")
}
return dividend / divisor, nil
}
Zwei wichtige Dinge müssen beachtet werden:
- Die Klammer kann für einen einzelnen Rückgabewert weggelassen werden.
- Jede
return
Anweisung muss einen Wert für alle deklarierten Rückgabewerte bereitstellen.
Benannte Rückgabewerte
Rückgabewerte können einer lokalen Variablen zugewiesen werden. Eine leere return
Anweisung kann dann verwendet werden, um ihre aktuellen Werte zurückzugeben. Dies wird als "nackte" Rückkehr bezeichnet. Naked return-Anweisungen sollten nur in kurzen Funktionen verwendet werden, da sie die Lesbarkeit in längeren Funktionen beeinträchtigen:
func Inverse(v float32) (reciprocal float32) {
if v == 0 {
return
}
reciprocal = 1 / v
return
}
//A function can also return multiple values
func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum - x
return
}
Zwei wichtige Dinge müssen beachtet werden:
- Die Klammern um die Rückgabewerte sind obligatorisch .
- Es muss immer eine leere
return
Anweisung angegeben werden.
Buchstäbliche Funktionen und Schließungen
Eine einfache wörtliche Funktion, die Hello!
zu stdout:
package main
import "fmt"
func main() {
func(){
fmt.Println("Hello!")
}()
}
Eine literale Funktion, die das Argument str
nach stdout druckt:
package main
import "fmt"
func main() {
func(str string) {
fmt.Println(str)
}("Hello!")
}
Eine literale Funktion, die die Variable str
:
package main
import "fmt"
func main() {
str := "Hello!"
func() {
fmt.Println(str)
}()
}
Es ist möglich, einer Variablen eine Literalfunktion zuzuweisen:
package main
import (
"fmt"
)
func main() {
str := "Hello!"
anon := func() {
fmt.Println(str)
}
anon()
}
Variadische Funktionen
Eine variadische Funktion kann mit einer beliebigen Anzahl von nachlaufenden Argumenten aufgerufen werden. Diese Elemente werden in einem Slice gespeichert.
package main
import "fmt"
func variadic(strs ...string) {
// strs is a slice of string
for i, str := range strs {
fmt.Printf("%d: %s\n", i, str)
}
}
func main() {
variadic("Hello", "Goodbye")
variadic("Str1", "Str2", "Str3")
}
Sie können auch eine Variadic-Funktion mit einem Slice versehen, mit ...
:
func main() {
strs := []string {"Str1", "Str2", "Str3"}
variadic(strs...)
}