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
}

spela det på lekplatsen

//A function can also return multiple values
func split(sum int) (x, y int) {
    x = sum * 4 / 9
    y = sum - x
    return
}

spela det på lekplatsen

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!")
    }()
}

spela det på lekplatsen


En bokstavlig funktion som skriver ut str argumentet till stdout:

package main

import "fmt"

func main() {
    func(str string) {
        fmt.Println(str)
    }("Hello!")
}

spela det på lekplatsen


En bokstavlig funktion som stänger över variabeln str :

package main

import "fmt"

func main() {
    str := "Hello!"
    func() {
        fmt.Println(str)
    }()
}

spela det på lekplatsen


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()
}

spela det på lekplatsen

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")
}

spela det på lekplatsen

Du kan också ge en bit till en variadisk funktion, med ... :

func main() {
     strs := []string {"Str1", "Str2", "Str3"}

     variadic(strs...)
}

spela det på lekplatsen



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow