文章插图
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
推荐阅读
- 大家知道有多少个产品是关于网络安全的吗?
- 在群晖NAS中安装cpolar内网穿透
- 钓鱼|夏季野钓学会这三招,天再热也不怕,只要鱼进窝,中鱼一条接一条
- 外婆和13岁外孙家中上吊自杀
- 外婆和十三岁外孙家中上吊自杀-外婆和十三岁外孙怎么了
- 外婆和13岁外孙家中上吊自杀-外婆带着13岁外孙自杀原因
- 围棋先下黑棋还是白棋 ?
- 脚心有痣代表什么意思?
- 三国演义中蜀国的五虎将是哪几位,三国蜀国五虎上将都是谁-
- 野生菌中毒如何自救-野生菌中毒怎么处理