关于GO中全局静态变量的理解


关于GO中全局静态变量的理解

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



    推荐阅读