Go中的静态局部变量

新手上路,请多包涵

是否可以在 Go 中定义一个局部变量,它可以在一个函数调用到另一个函数时保持其值?在 C 中,我们可以使用保留字 static 来做到这一点。

C 中的示例:

 int func() {
    static int x = 0;
    x++;
    return x;
}

原文由 Gustavo Bittencourt 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

使用 闭包

函数文字是闭包:它们可以引用周围函数中定义的变量。然后这些变量在周围函数和函数文字之间共享,只要它们可访问,它们就会存在。

它不必在全局范围内,就在函数定义之外。

 func main() {

    x := 1

    y := func() {
        fmt.Println("x:", x)
        x++
    }

    for i := 0; i < 10; i++ {
        y()
    }
}

移动游乐场 示例)

原文由 IamNaN 发布,翻译遵循 CC BY-SA 3.0 许可协议

你可以这样做

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
}

操场上的链接 https://play.golang.org/p/D9mv9_qKmN

原文由 Tarik 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏