golang如何实现静态变量的效果.md
目录
说明
go的结构和方法接收者, 可以模拟类的概念, 然而go不支持静态变量
不能总是每次先创建一个结构体, 然后获取变量吧
该如何办?
如何创建"类"
先展示一下,平时我是如何创建"类"的
1.私有的结构体作为真实对象
-
对外暴露方法,这个方法类似class可以作为参数传递,使用这个class就可以创建对象
-
BaseVar定义对外暴露的接口
-
定义方法的interface,方便作为参数传递
type BaseVar interface {
//对外暴露的接口
}
//方便传递
type VarDecriptor func(params ...interface{}) BaseVar
//等同于类
func VarBinary(params ...interface{}) BaseVar {
s := &varBinary{
FormatCode: 0o10,
TextCode: "B",
PreferredTypes: []reflect.Kind{reflect.Uint8, reflect.Slice},
}
return s
}
//实质上的对象
type varBinary struct{
BaseVar //外部接口
FormatCode int
TextCode string
PreferredTypes []reflect.Kind //bytes bytearray
value []byte
}
静态变量有何意义
关联常量与类
解决方法
定义全局变量,以"类"名作为key,存放静态变量。runtime能动态获取"类"名,通过"类"名取值。
var gFormatCode = map[string]int{
"VarBinary": 1,
}
func FormatCode(f VarDecriptor) int {
//取方法名
fname := runtime.FuncForPC(reflect.ValueOf(fc).Pointer()).Name()
names := strings.Split(fname, ".")
funcName := names[1]
//从全局变量中取值
return gFormatCode[funcName]
}
//使用时通过FormatCode,传入上面的VarBinary,就可以获取常量
佛說大乘無量壽莊嚴清淨平等覺經pdf 净土大经科注2014-doc 此生必看的科学实验-水知道答案 印光大师十念法(胡小林主讲第1集)