一.golang的命名规范及大小写的访问权限
1、golang的命名推荐使用驼峰命名法,必须以一个字母(Unicode字母)或下划线开头,后面可以跟任意数量的字母、数字或下划线。
2、golang中根据首字母的大小写来确定可以访问的权限。无论是方法名、常量、变量名还是结构体的名称,如果首字母大写,则可以被其他的包访问;如果首字母小写,则只能在本包中使用
可以简单的理解成,首字母大写是公有的,首字母小写是私有的
3、结构体中属性名的大写
如果属性名小写则在数据解析(如json解析,或将结构体作为请求或访问参数)时无法解析
type User struct {
name string
age int
}
func main() {
user:=User{"Tom",18}
if userJSON,err:=json.Marshal(user);err==nil{
fmt.Println(string(userJSON)) //数据无法解析
}
}
4. 结构体与 JSON 的映射
JSON 中的标签由两部分组成,如下所示的 name
和 age
都是标签名,后面的所有的字符串是标签选项,即 encoding/json.tagOptions
,标签名和字段名会建立一一对应的关系,后面的标签选项也会影响编解码的过程:
type Author struct {
Name string `json:"name,omitempty"`
Age int32 `json:"age,string,omitempty"`
}
常见的两个标签是 string
和 omitempty
,前者表示当前的整数或者浮点数是由 JSON 中的字符串表示的,而另一个字段 omitempty
会在字段为零值时,直接在生成的 JSON 中忽略对应的键值对,例如:"age": 0
、"author": ""
等。标准库会使用 encoding/json.parseTag
函数来解析标签:
func parseTag(tag string) (string, tagOptions) {
if idx := strings.Index(tag, ","); idx != -1 {
return tag[:idx], tagOptions(tag[idx+1:])
}
return tag, tagOptions("")
}
从该方法的实现中,我们能分析出 JSON 标准库中的合法标签是什么形式的 — 标签名和标签选项都以 ,
连接,最前面的字符串为标签名,后面的都是标签选项。
参考链接:https://blog.csdn.net/skh2015java/java/article/details/54316195
https://draveness.me/golang/docs/part4-advanced/ch09-stdlib/golang-json/