1 Go的枚举
1.1 定义常数实现枚举
◆ 类型别名的形式来声明类型 ◆ iota来自增和自动赋值
显然输出为2
这样亦可.
1.2 何时可用iota ,何时又不可用iota呢?
◆ 无状态且非持久化,可以使用iota ◆ 有状态或者需要持久化,不能使用iota
1.3 显式iota定义
定义好之后,值不可再改变!
2 在Go中如何使用JSON
2.1 标准库内建的JSON包
默认使用的JSON字段名称是它的Field名称
2.2 并非任何类型都可序列化
◆ 支持string、 bool、 数字类型、数组和切片、结构体、map ◆ Channel、complex、 function 类型无法进行json序列化 ◆ 结构体中的循环数据结构,序列化时不会被处理
2.3 结构体中自定义字段名称
◆ JSON tag key : name,[omitempty,-] ◆ [string]标记 , 定义bool,浮点,整数类型使用字符串编码 ◆ 临时添加字段:内嵌结构体,合并多个结构体
2.3.1 序列化演示
- demo代码-json.go
- 运行结果
- 对name进行自定义
- 可以发现age无法实现序列化导出,将其改为大写即可
- 其中的omitempty可以过滤空值(包括0),于是结果中不再包含age信息
- 有-不会序列化
- 去除-即可
- 整型加上string会以字符串形式序列化
2.3.2 反序列化演示
- 无法序列化id,所以要求json一定要与结构体中数据类型保持一致
2.4 高性能JSON库 - jsoniter [json-iterator]
◆ 快,并且更快 ◆ 支持java和go ◆ 百分百兼容JSON标准库, 一行代码迁移到jsoniter ◆ 安装: go get github.com/json-iterator/go
3 config 配置
3.1 分类标准
内容
静态和动态
环境
开发、测试、灰度、生产
形式
本地文件和分布式服务
格式
ini > properties > yaml > toml > xml > json(推荐度排序)
用途 - 程序/应用级别
◆ 配置文件命名规范 前缀 [-_ ] 功能
◆ 程序级别 可以不分组,比如: boot.ini,config.ini
◆ 应用级别分组 比如app-mysql.properties
环境来变量化配置项
◆ 不同环境使用不同的配置文件 ◆ 变量化因环境不同的可变配置项
3.2 统一配置工具库 - props 设计
◆ 各种配置源抽象或转换为key/value结构
◆ 支持prop,ini,zk,consul.etcd,nacos
◆ 支持unmarshal
◆ props配置客户端工具库加持 INI格式
◆ INI文件由节、键、值组成
◆ INI格式三要素 :节、参数(key/value)、注释
◆ section :方括号包围,比如: [mysql]
◆ 参数: key=value ,有些工具支持冒号分割
◆ 注释,使用;,有些编辑器和工具支持#
◆ Section作为分组
◆ props配置客户端使用完整的key来解释
◆ 完整的key由Section和参数key组成 , .
分割
4 基础资源层-配置设计-starter编码
- config.ini
参考
golang中struct转json后键名首字母大小写问题解决 GO从0到1实战微服务版抢红包系统