package main import "fmt" func main() { // make an Add2 function, give it a name p2, and call it: p2 := Add2() fmt.Printf("Call Add2 for 3 gives: %vn", p2(3)) // make a special Adder function, a gets value 3: TwoAdder := Adder(2) fmt.Printf("The result is: %vn", TwoAdder(3)) } func Add2() func(b int) int { return func(b int) int { return b + 2 } } func Adder(a int) func(b int) int { return func(b int) int { return a + b } }輸出結果如下所示:
Call Add2 for 3 gives: 5
The result is: 5
func Add2() (func(b int) int)
func Adder(a int) (func(b int) int)
package main import "fmt" func main() { var f = Adder() fmt.Print(f(1), " - ") fmt.Print(f(20), " - ") fmt.Print(f(300)) } func Adder() func(int) int { var x int return func(delta int) int { x += delta return x } }函數 Adder() 現在被賦值到變數 f 中(型別為 func(int) int )。
1 - 21 - 321
三次呼叫函數 f 的過程中函數 Adder() 中變數 delta 的值分別為:1、20 和 300。
var g int
go func(i int) {
s := 0
for j := 0; j < i; j++ { s += j }
g = s
}(1000) // Passes argument 1000 to the function literal.