Go 从子包访问全局变量
我正在编写一个小型go应用程序,它在main.go中定义了一些全局常量,如下所示: 梅因,加油Go 从子包访问全局变量,go,Go,我正在编写一个小型go应用程序,它在main.go中定义了一些全局常量,如下所示: 梅因,加油 package main import ( "github.com/JackBracken/global/sub" ) const AppName string = "global string" func main() { sub.Run() } sub/sub.go package sub import "fmt" func Run() { fmt.Printl
package main
import (
"github.com/JackBracken/global/sub"
)
const AppName string = "global string"
func main() {
sub.Run()
}
sub/sub.go
package sub
import "fmt"
func Run() {
fmt.Println(AppName)
}
我对Go还很陌生,希望类似的东西能够工作,但是Go build
抛出错误sub/sub.Go:6:undefined:AppName
我知道我可以做一些事情,比如创建
globals
包,在sub.go
中导入它,并使用globals.AppName
等引用我的全局变量,但我想知道这是否可能是我的原始方式,还是我完全误解了作用域和包?您不能在其他任何地方访问“主”包中的符号,原因很简单,Go不允许导入循环
如果需要访问“main”和其他包中的变量,则需要将变量移到其他地方,移到两者都可以访问的包中。因此,您的“globals”包是正确的想法。您不能在其他任何地方访问“main”包中的符号,原因很简单,Go不允许导入循环
如果需要访问“main”和其他包中的变量,则需要将变量移到其他地方,移到两者都可以访问的包中。因此,您的“globals”包是正确的想法。您不能导入“main”package@JimB我知道我想的很多。全局变量仅在定义它们的包中是全局的,那么?要从另一个包引用它们,该包必须导入?我想我假设一个子包能够访问其父级的全局变量(但我读得越多,“子包”的概念就越没有意义)。子包甚至不是一件可以做的事情。每个包都是不同的,甚至与它们所在的子目录中的包也是不同的。那里没有隐式访问。如果它在你的软件包中,你可以天生使用它。如果它不在包中,即使它在父目录中,也必须导入它。不幸的是,您无法导入
main
包(测试文件中除外),因此package main
中的任何内容都只能访问该包,period。您无法导入“main”package@JimB我知道我想的很多。全局变量仅在定义它们的包中是全局的,那么?要从另一个包引用它们,该包必须导入?我想我假设一个子包能够访问其父级的全局变量(但我读得越多,“子包”的概念就越没有意义)。子包甚至不是一件可以做的事情。每个包都是不同的,甚至与它们所在的子目录中的包也是不同的。那里没有隐式访问。如果它在你的软件包中,你可以天生使用它。如果它不在包中,即使它在父目录中,也必须导入它。不幸的是,您不能导入main
包(测试文件除外),因此packagemain
中的任何内容都只能访问该包,period。