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组成 , .分割

参考

golang中struct转json后键名首字母大小写问题解决
GO从0到1实战微服务版抢红包系统