从子包访问全局变量

Jac*_*ken 2 go

我正在编写一个小的 go 应用程序,它在 main.go 中定义了一些全局常量,如下所示:

main.go

package main

import (
    "github.com/JackBracken/global/sub"
)

const AppName string = "global string"

func main() {
    sub.Run()
}
Run Code Online (Sandbox Code Playgroud)

子/子.go

package sub

import "fmt"

func Run() {
    fmt.Println(AppName)
}
Run Code Online (Sandbox Code Playgroud)

我对 Go 还很陌生,希望这样的事情能正常工作,但go build会引发错误sub/sub.go:6: undefined: AppName

我知道我可以做一些事情,比如创建一个globals包,导入它sub.go并用globals.AppName等等来引用我的全局变量,但我想知道这是否可能是我原来的方式,或者我只是完全误解了范围和包?

Fli*_*mzy 6

您无法在其他任何地方访问 'main' 包中的符号,原因很简单,Go 不允许导入循环。

如果您需要访问 'main' 和其他一些包中的变量,则需要将变量移动到其他地方,到两者都可以访问的包中。所以你的“全局”包是正确的想法。