2017-04-20 73 views
0

我寫在main.go定義象下面這樣一些全球consts小Go應用程序的全局變量:訪問從子包

main.go

package main 

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

const AppName string = "global string" 

func main() { 
    sub.Run() 
} 

子/ sub.go

package sub 

import "fmt" 

func Run() { 
    fmt.Println(AppName) 
} 

我很新,去期待類似這樣的工作,但go build引發錯誤sub/sub.go:6: undefined: AppName

我知道我可以做一些像創建一個globals包,將其導入sub.go和參考我的全局變量globals.AppName等,但我想知道,如果有可能我原來的方式,還是我只是完全誤解範圍和包裹?

+1

您無法導入「主」包 – JimB

+0

@JimB我明白我的想法。全局變量僅在它們在其中定義的包中是全局變量?並從另一個必須導入包的包中引用它們?我想我假定一個子包能夠訪問其父節點的全局變量(但我讀的越多,「子包」的想法似乎就越沒有意義)。 –

+2

子包甚至不是​​Go中的東西。每個軟件包都是獨立的,即使它們是其子目錄中的軟件包。那裏沒有隱式訪問。如果它在你的包裝中,你可以天生使用它。如果它不在你的包中,即使它在父目錄中,你仍然需要導入它。不幸的是,你不能導入'main'包(除了在測試文件中),所以'package main'中的任何內容都只能訪問該包。 – Kaedys

回答

4

您不能在任何其他地方訪問'main'包中的符號,原因很簡單,Go不允許導入循環。

如果你需要在'main'和其他包中訪問一個變量,你需要將你的變量移動到一個可以訪問的包中。所以你的'全局'包是正確的想法。

+0

這對我來說很有意義,歡呼聲。 –