Go
funktioner
Sök…
Introduktion
Funktioner i Go tillhandahåller organiserad, återanvändbar kod för att utföra en uppsättning åtgärder. Funktioner förenklar kodningsprocessen, förhindrar redundant logik och gör koden lättare att följa. Det här ämnet beskriver deklarationen och användningen av funktioner, argument, parametrar, returrätt och tillämpningsområden i Go.
Syntax
- func () // funktionstyp utan argument och inget returvärde
- func (x int) int // accepterar heltal och returnerar ett heltal
- func (a, b int, z float32) bool // accepterar 2 heltal, en float och returnerar en boolean
- func (prefixsträng, värden ... int) // "variadisk" funktion som accepterar en sträng och ett eller flera antal heltal
- func () (int, bool) // funktion som returnerar två värden
- func (a, b int, z float64, opt ... interface {}) (framgång bool) // accepterar 2 heltal, ett float och ett eller flera antal gränssnitt och returnerar namnet booleskt värde (som redan är initialiserat inuti funktionen )
Grunddeklaration
En enkel funktion som inte accepterar några parametrar och inte returnerar några värden:
func SayHello() {
fmt.Println("Hello!")
}
parametrar
En funktion kan valfritt deklarera en uppsättning parametrar:
func SayHelloToMe(firstName, lastName string, age int) {
fmt.Printf("Hello, %s %s!\n", firstName, lastName)
fmt.Printf("You are %d", age)
}
Lägg märke till att typen för firstName
utelämnas eftersom den är identisk med lastName
.
Returnera värden
En funktion kan returnera ett eller flera värden till den som ringer:
func AddAndMultiply(a, b int) (int, int) {
return a+b, a*b
}
Det andra returvärdet kan också vara felet var:
import errors
func Divide(dividend, divisor int) (int, error) {
if divisor == 0 {
return 0, errors.New("Division by zero forbidden")
}
return dividend / divisor, nil
}
Två viktiga saker måste noteras:
- Parentesen kan utelämnas för ett enda returvärde.
- Varje
return
uttalande måste ge ett värde för alla deklarerade returvärden.
Namngivna returvärden
Returvärden kan tilldelas en lokal variabel. En tom return
uttalande kan sedan användas för att lämna tillbaka sina aktuella värden. Detta kallas "naken" återkomst. Uttalanden om nakna returer bör endast användas i korta funktioner eftersom de skadar läsbarheten i längre funktioner:
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
}
Två viktiga saker måste noteras:
- Parentesen kring returvärdena är obligatoriska .
- En tom
return
uttalande måste alltid finnas.
Bokstavliga funktioner och stängningar
En enkel bokstavlig funktion som skriver ut Hello!
till stdout:
package main
import "fmt"
func main() {
func(){
fmt.Println("Hello!")
}()
}
En bokstavlig funktion som skriver ut str
argumentet till stdout:
package main
import "fmt"
func main() {
func(str string) {
fmt.Println(str)
}("Hello!")
}
En bokstavlig funktion som stänger över variabeln str
:
package main
import "fmt"
func main() {
str := "Hello!"
func() {
fmt.Println(str)
}()
}
Det är möjligt att tilldela en bokstavlig funktion till en variabel:
package main
import (
"fmt"
)
func main() {
str := "Hello!"
anon := func() {
fmt.Println(str)
}
anon()
}
Variadiska funktioner
En variadisk funktion kan anropas med valfritt antal efterföljande argument. Dessa element lagras i en skiva.
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")
}
Du kan också ge en bit till en variadisk funktion, med ...
:
func main() {
strs := []string {"Str1", "Str2", "Str3"}
variadic(strs...)
}