<返回更多

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

2022-06-22    MEEGO
加入收藏
关于GO中全局静态变量的理解

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
声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>