GO的全局变量
很多从C++、C#等转过来做GO的初学小伙伴,都会发现同样一个疑问:就是GO中没有类似C++的静态变量。这就很纳闷了。
有些配置数据,比如数据库的链接IP等,是需要全局共享的,有些还会在中途的时候手动改变它的值。这该怎么处理呢?总不能每次使用的时候,重新加载一次到结构体吧。
我的方法是这样做的:
GO里面的每个包package,相当于C++里的类实例,同一个包内部的结构体、方法等都是可以相互调用的。这就是为什么很多人会把所有的文件都放在根目录下的原因。
我们在包中的一个文件里,直接把变量定义成包的全局变量即可,如下面的变量mval。
package model
import "fmt"
var mval int
func GetMVal() int {
return mval
}
func SetMVal() {
mval = 13
}
func MPrintVal() {
fmt.Printf("mval:%dn", mval)
}
包被调入后,这个包中的全局变量就会一直存在,作用相当于全局静态变量,后面无论是其他包或者本包读取它的值也会一直保持设置后的值。
还有另外一种方法是定义一个文件,把用到的全局变量都设置在这里,这样就可以了。
package data
var Serverip string
var Serverport int
程序开始时,引入包,设置好配置数据。使用的时候,再引用包,然后调用方法把变量读出来即可。解决问题了。
package main
import (
"Test1/data"
"Test1/model"
"Test1/view"
"fmt"
)
func main() {
data.Serverip = "127.0.0.1"
data.Serverport = 5000
fmt.Println(data.Serverip, data.Serverport)
model.SetMVal()
model.MPrintVal()
view.ShowMVal()
}
输出结果:
127.0.0.1 5000
mval:13
view show mval: 13