go语言开发基础26 - 之go语言里结构体的tag使用
Golang中可以为结构体的字段添加tag,这类似于Java中为类的属性添加的注解,Golang本身的encoding/json包解析json使用了tag,一些开源的ORM框架,也广泛使用了tag,那么,我们如何通过代码自己实现tag的解析,从而简化结构体字段的使用方式呢?下面看一个例子。
示例
1、问题示例
package main
import (
"encoding/json"
"fmt"
)
type Student1 struct {
name string
age int
score int
}
func main() {
var stu Student1 = Student1{
name: "张三",
age: 22,
score: 88,
}
data, err := json.Marshal(stu)
if err != nil {
fmt.Println("Json Encoding Error: ", err)
return
}
fmt.Println(string(data)) // 结果为:{}
}
说明:为什么结果是:{}那?这是因为json是encoding包下的方法,而结构体里的字段首字母是小写的(不支持导出),所以结果是:{}
解决:我们只需要将结构体里的字段首字母改成大写就可以了。
问题:我希望json序列化后得到的是全小写的字段,这要怎么实现那?这里就可以引出tag的概念,下面看tag的示例
2、tag示例
package main
import (
"encoding/json"
"fmt"
)
type Student2 struct {
Name string `json:"name"` // `json:"name"`:这就是指定的tag,表示json序列化时,结构体里的字段展示形式为name
Age int `json:"age"`
Score int `json:"score"`
}
func main() {
var stu Student2 = Student2{
Name: "张三",
Age: 22,
Score: 88,
}
data, err := json.Marshal(stu)
if err != nil {
fmt.Println("Json Encoding Error: ", err)
return
}
fmt.Println(string(data)) // 结果为:{"name":"张三","age":22,"score":88}
}
这里我们发现结构体里的字段首字母是大写,最总json序列化出来的结果是小写的,这就是tag的功能。

浙公网安备 33010602011771号