全局变量private to file

dev*_*k23 12 global-variables go

在GOLANG中,有没有办法让变量的范围在包中的文件本地?就我而言,有两个文件ex1.go和ex02.go. ex01.go定义了一个全局变量

var wg sync.WaitGroup
Run Code Online (Sandbox Code Playgroud)

用于该文件中的各个函数.

在另一个文件ex02.go(与ex01.go无关,除了ex01.go和ex02.go都属于同一类问题 - 即并发),我无法为waitGroup定义一个变量

var wg sync.WaitGroup
Run Code Online (Sandbox Code Playgroud)

我收到一个错误 - "在此块中重新声明变量名称"

有没有办法让变量名称不会溢出到其他文件?

Mar*_*erg 20

出于变量作用域的目的,文件在Go中没有意义.将包中的所有文件想象为它们将被连接起来,这些(简化)正是在编译之前发生的事情.

这意味着:不,没有办法将变量作用于文件.

如果需要两个全局WaitGroups,则需要将它们定义为单个变量.

  • 谢谢Markus,这似乎给您带来了很多不便……或者可能仅仅是我一个人。是否有等效于闭包的东西(我们在javascript中定义的方法:(function(){})()..)可以定义?如果有一个大型项目,如何跟踪包中的变量? (2认同)

Uve*_*tel 5

只有显式导入的标识符才具有文件范围.在你定义的文件wg.go中说

package wg
var Wg sync.WaitGroup
// and all staff common to class of problems - i.e. concurrency
Run Code Online (Sandbox Code Playgroud)

然后你可以在文件ex1.go

import wg
wg.Wg.Add(1) //use locally to file
Run Code Online (Sandbox Code Playgroud)

同样在ex2.go