go语言是没有静态变量的,但是在实际过程中往往需要类似的效果,比如配置信息等。下面这种写法以读写用户名(username)为例实现了类似静态变量的效果。

首先看main.go中调用的写法:

//在main函数中set好username的值,然后在其他函数中获取username的值

//main函数中进行set操作
func main() {
	config.WithConfig().SetConfig()
	initApp()
}
//该方法进行get操作
func initApp(){
	config.WithConfig().GetConfig()
}

下边来看config.go的写法:

package config

//配置结构体
type Config struct {
	username string
}

//关键在此,声明一个全局变量所有的读写操作实际上都是在操作c
var c *Config

func init() {
	c = new(Config)
}

//方便链式操作
func WithConfig() *Config {
	return c.WithConfig()
}
func (c *Config) WithConfig() *Config {
	return c
}

//写
func (c *Config) SetConfig(name string) {
	c.username = name
}

//读
func (c *Config) GetConfig() string {
	return c.username
}