关于网友提出的“(golang)go 在一个文件中引入其他文件中的变量?”问题疑问,本网通过在网上对“(golang)go 在一个文件中引入其他文件中的变量?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题:(golang)go 在一个文件中引入其他文件中的变量?描述:
刚刚学习go语言,学web开发,有个这样的问题。
例如我在main方法中初始化了config 以及logger等信息,像下面这样:
go
func main(){ cfg := &web.Config{} server := web.NewServer(cfg) logger := server.Logger() //定义route信息 并制定处理的函数 server.Get('/',blog.HomeController) server.ListenAndServe("127.0.0.1:9999") }
然后我想在controller中用logger或者cfg这个变量 我该怎么操作,难道我又要重新定义并初始化一遍吗? 那我不是又得NewServer ?
解决方案1:
main也是一个包,有一个特别的地方在main这个包里必须有一个main()函数,并且现在看起来main包里定义的变量别的包是无法引用的。
所以你的目录结构可以是这样:
main.go
logger/logger.go
将logger需要的变量定义在logger.go里。并且根据go的symbol可见范围,需要大写。
题主需要按照golong.org的指引,一步步看文档。这些问题在http://golang.org/doc/code.html 里都有。中文版链接https://golang-china.appspot.com/doc/code.html
解决方案2:可以在第三方包里面初始化全局变量,然后在main.go和controller里面都引入这个第三方包。
解决方案3:你只需要把cfg和logger定义到main的外面就可以了,然后在main里面赋值,切记赋值的时候用=而不是:=
var cfg configtype
var server webtype
var logger logtype
func main(){
cfg = &web.Config{}
server = web.NewServer(cfg)
logger = server.Logger()
//定义route信息 并制定处理的函数
server.Get('/',blog.HomeController)
server.ListenAndServe("127.0.0.1:9999")
}