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

我正在编写一个小型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.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。