Go podle Příkladů: Uzávěry (closure)

Go podporuje anonymni funkce, které mohou výtvářet uzávěry. Anonymní funkce jsou užitečné když chcete definovat funkci uvnitř funkce bez nutnosti ji pojmenovávat.

package main
import "fmt"

Tato funkce intSekv vrací jinou funkci, kterou jsme definovali jako anonymní uvnitř funkce intSekv. Vracená funkce uzavírá přes proměnnou i a vytváří tak uzávěru. *Pozn: Jinými slovy, hodnota uzavřené proměnné se zachovává přes další volání vrácené anonymní funkce.

func intSekv() func() int {
    i := 0
    return func() int {
        i++
        return i
    }
}
func main() {

Voláme intSekv, přiřazující výsledek (funkci) do dalsiInt. Tato funkce zachytí svou vlastní hodnotu i, která se bude aktualizovat pokaždé během volání dalsiInt.

    dalsiInt := intSekv()

Všimněte si efektu uzávěry během několika volání dalsiInt.

    fmt.Println(dalsiInt())
    fmt.Println(dalsiInt())
    fmt.Println(dalsiInt())

Pro ověření že stav je unikátní k té které funkci, vytvoříme a otestujeme jednu novou.

    noveInty := intSekv()
    fmt.Println(noveInty())
}
$ go run closures.go
1
2
3
1

Poslední vlastostí funkcí které se pro teď podíváme je rekurze.

Další příklad: Rekurze.