是否可以在Go中定义一个局部变量,可以将其值从一个函数调用维护到另一个函数调用?在C中,我们可以使用保留字来完成此操作static.
C中的示例:
int func() {
static int x = 0;
x++;
return x;
}
Run Code Online (Sandbox Code Playgroud)
Iam*_*NaN 26
使用闭包:
函数文字是闭包:它们可以引用周围函数中定义的变量.然后,这些变量在周围函数和函数文本之间共享,只要它们可访问,它们就会存在.
它不必位于全局范围内,只是在函数定义之外.
func main() {
x := 1
y := func() {
fmt.Println("x:", x)
x++
}
for i := 0; i < 10; i++ {
y()
}
}
Run Code Online (Sandbox Code Playgroud)
(围棋游乐场的样本)
mji*_*son 14
在全局范围内声明var:
var i = 1
func a() {
println(i)
i++
}
Run Code Online (Sandbox Code Playgroud)
你可以做这样的事情
package main
import (
"fmt"
)
func main() {
f := do()
f() // 1
f() // 2
}
func do() (f func()){
var i int
f = func(){
i++
fmt.Println(i)
}
return
}
Run Code Online (Sandbox Code Playgroud)
Playground上的链接https://play.golang.org/p/D9mv9_qKmN