當前位置: 首頁>>編程語言>>正文


Go語言教程:閉包

返回Go語言教程首頁

概念簡介

Go語言支持匿名函數,並能用其構造 閉包
匿名函數在你想定義一個不需要命名的內聯函數時是很實用的。

例程代碼


package main

import "fmt"

// 這個 `intSeq` 函數返回另一個在 `intSeq` 函數體內定義的
// 匿名函數。這個返回的函數使用閉包的方式 _隱藏_ 變量 `i`。
func intSeq() func() int {
    i := 0
    return func() int {
        i++
        return i
    }
}

func main() {

    // 我們調用 `intSeq` 函數,將返回值(一個函數)賦給
    // `nextInt`。這個函數的值包含了自己的值 `i`,這樣在每
    // 次調用 `nextInt` 時都會更新 `i` 的值。
    nextInt := intSeq()

    // 通過多次調用 `nextInt` 來看看閉包的效果。
    fmt.Println(nextInt())
    fmt.Println(nextInt())
    fmt.Println(nextInt())

    // 為了確認這個狀態對於這個特定的函數是唯一的,我們
    // 重新創建並測試一下。
    newInts := intSeq()
    fmt.Println(newInts())
}

執行&輸出


$ go run closures.go
1
2
3
1

# 我們馬上要學習關於函數的最後一個特性:遞歸。

課程導航

學習上一篇:Go語言教程:可變參數函數    學習下一篇:Go語言教程:遞歸

相關資料

本例程github源代碼:https://github.com/xg-wang/gobyexample/tree/master/examples/closures

Go語言閉包

本文由《純淨天空》出品。文章地址: https://vimsky.com/zh-tw/article/4024.html,未經允許,請勿轉載。