背景:
我们都知道go的struct中,如果字段需要对外使用,就需要使用首字母大写的格式,但是如果API中约定要使用小写字母开头呢?
比如:
type CbsVolume struct {
// cbs id
CbsDiskId *string
// fs类型
FsType *string
// 是否只读
ReadOnly *bool
}
此时如果执行json.Marshal(),结构体会有三个字段CbsDiskId,FsType,ReadOnly,都是首字母大写的
如果我们要想使用小写的,可以借助tag实现
type CbsVolume struct {
// cbs id
CbsDiskId *string `json:"cbsDiskId,omitempty" name:"cbsDiskId"`
// fs类型
FsType *string `json:"fsType,omitempty" name:"fsType"`
// 是否只读
ReadOnly *bool `json:"readOnly,omitempty" name:"readOnly"`
}
此时转换出来的json中 三个字段首字母都是小写
一句话: go的 tag 可以帮你在零污染实体的前提下实现json的自定义
什么大小写转换,驼峰转化都是可以实现的
详细 的原理可以参考:
https://juejin.im/post/5b338516f265da596e4ceb9e