一.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/

posted on 2020-07-07 12:06  yuluoxingkong  阅读(282)  评论(0编辑  收藏  举报