Szukaj…


Wprowadzenie

Funkcje w Go zapewniają zorganizowany kod wielokrotnego użytku do wykonywania zestawu działań. Funkcje upraszczają proces kodowania, zapobiegają nadmiarowej logice i ułatwiają śledzenie kodu. W tym temacie opisano deklarację i wykorzystanie funkcji, argumentów, parametrów, instrukcji return i zakresów w Go.

Składnia

  • func () // typ funkcji bez argumentów i bez wartości zwracanej
  • func (x int) int // przyjmuje liczbę całkowitą i zwraca liczbę całkowitą
  • func (a, b int, z float32) bool // przyjmuje 2 liczby całkowite, jedną zmiennoprzecinkową i zwraca wartość logiczną
  • func (ciąg prefiksu, wartości ... int) // funkcja „variadic”, która akceptuje jeden ciąg i jedną lub więcej liczb całkowitych
  • func () (int, bool) // funkcja zwracająca dwie wartości
  • func (a, b int, z float64, opt ... interface {}) (success bool) // akceptuje 2 liczby całkowite, jedną zmiennoprzecinkową i jedną lub więcej liczb interfejsów i zwraca nazwaną wartość boolowską (która jest już zainicjalizowana wewnątrz funkcji )

Podstawowa deklaracja

Prosta funkcja, która nie przyjmuje żadnych parametrów i nie zwraca żadnych wartości:

func SayHello() {
    fmt.Println("Hello!")
}

Parametry

Funkcja może opcjonalnie zadeklarować zestaw parametrów:

func SayHelloToMe(firstName, lastName string, age int) {
    fmt.Printf("Hello, %s %s!\n", firstName, lastName)
    fmt.Printf("You are %d", age)
}

Zauważ, że typ dla firstName został pominięty, ponieważ jest identyczny z lastName .

Zwracane wartości

Funkcja może zwrócić wywołującą jedną lub więcej wartości:

func AddAndMultiply(a, b int) (int, int) {
    return a+b, a*b
}

Drugą wartością zwracaną może być również błąd 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
}

Należy zwrócić uwagę na dwie ważne rzeczy:

  • Nawias można pominąć dla pojedynczej wartości zwracanej.
  • Każda instrukcja return musi zawierać wartość dla wszystkich deklarowanych wartości return.

Nazwane wartości zwrotne

Zwracane wartości można przypisać do zmiennej lokalnej. Pusta return oświadczenie może być następnie wykorzystane do powrotu ich bieżące wartości. Jest to znane jako powrót „nagi” . Naga instrukcja return powinna być używana tylko w krótkich funkcjach, ponieważ szkodzą one czytelności w dłuższych funkcjach:

func Inverse(v float32) (reciprocal float32) {
    if v == 0 {
        return
    }
    reciprocal = 1 / v
    return
}

zagraj na placu zabaw

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

zagraj na placu zabaw

Należy zwrócić uwagę na dwie ważne rzeczy:

  • Nawiasy wokół zwracanych wartości są obowiązkowe .
  • Zawsze należy podać puste sprawozdanie return .

Dosłowne funkcje i zamknięcia

Prosta funkcja dosłowna, drukowanie Hello! na standardowe wyjście:

package main

import "fmt"

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

zagraj na placu zabaw


Dosłowna funkcja, wypisująca argument str na standardowe wyjście:

package main

import "fmt"

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

zagraj na placu zabaw


Dosłowna funkcja zamykająca zmienną str :

package main

import "fmt"

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

zagraj na placu zabaw


Możliwe jest przypisanie funkcji dosłownej do zmiennej:

package main

import (
    "fmt"
)

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

zagraj na placu zabaw

Funkcje Variadic

Funkcję variadic można wywołać z dowolną liczbą końcowych argumentów. Te elementy są przechowywane w plasterku.

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

zagraj na placu zabaw

Możesz także nadać plasterek funkcji variadic za pomocą ... :

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

     variadic(strs...)
}

zagraj na placu zabaw



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow