首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Go中的静态局部变量

Go中的静态局部变量
EN

Stack Overflow用户
提问于 2015-05-31 21:35:20
回答 5查看 57.9K关注 0票数 39

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

C语言示例:

代码语言:javascript
复制
int func() {
    static int x = 0; 
    x++;
    return x;
}
EN

回答 5

Stack Overflow用户

发布于 2015-05-31 21:37:29

在全局范围内声明一个var:

代码语言:javascript
复制
var i = 1

func a() {
  println(i)
  i++
}
票数 17
EN

Stack Overflow用户

发布于 2016-05-19 06:27:18

你可以这样做

代码语言:javascript
复制
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上的链接

票数 16
EN

Stack Overflow用户

发布于 2019-08-13 14:57:32

与塔里克的建议类似,但staticCounter()返回一个整型函数

代码语言:javascript
复制
package main

import (
    "fmt"
)

func staticCounter() (f func()(int)){
  var i int
  f = func()(int){
    i++
//  fmt.Println(i)
    return i
  }
  return
}

func main() {
  f := staticCounter()
  g := staticCounter()
  fmt.Println(f())
  fmt.Println(f())
  fmt.Println(f())
  fmt.Println(f())
  fmt.Println(g())
  fmt.Println(g())
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30558071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档