栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

golang如何实现静态变量的效果

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

golang如何实现静态变量的效果

说明

go的结构和方法接收者, 可以模拟类的概念, 然而go不支持静态变量

不能总是每次先创建一个结构体, 然后获取变量吧

该如何办?

如何创建"类"

先展示一下,平时我是如何创建"类"的

  1. 私有的结构体作为真实对象

  2. 对外暴露方法,这个方法类似class可以作为参数传递,使用这个class就可以创建对象

  3. BaseVar定义对外暴露的接口

  4. 定义方法的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集)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/907156.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号