struct 转换为json的tag使用形式(语法)
package main
import (
"encoding/json"
"fmt"
)
type Results struct {
Code int `json:"code,omitempty" xml:"code,omitempty"` //转换为json时 键 Code 变为 code 如果为 0 则忽略 转换为xml时 同样的规则
Method string `json:"method"` //转换为json时 键 Method 变为 method
Msg string `json:"msg,omitempty"` //转换为json时 键 Msg 变为 msg 如果为 空字符串 则忽略
}
func main() {
results := Results{
Method:"POST",
Msg:"",
}
jsonStr,_:=json.Marshal(results)
fmt.Println(string(jsonStr))
//输出结果为 {"method":"POST"} Code没赋值默认为0
}
struct 转换为json中tag的常见用法
type Results struct {
Code int `json:"-"` //忽略此key
Code int `json:"-,"` //指定key为-
Code int `json:"code"` //定义key
Code int `json:",omitempty"` //忽略0值 此处会根据类型忽略 0 false "" nil
Code int `json:"code,omitempty"` //定义key 并忽略0值
Code int `json:",string"` // 转换为string 类型 string类型转换为string类型会多出一对双引号
}
struct tag 的解析
package main
import (
"fmt"
"reflect"
)
type Results struct {
Code int `mytag:"code,primaryKey"` //自定义tag内容
}
func main() {
results := Results{Code:200}
t := reflect.TypeOf(results) //利用反射获得 tag 信息
field , found := t.FieldByName("Code") //获得struct中Code的tag信息
fmt.Println(found) //获得结果 没有key 则为false
fmt.Println(field.Tag.Get("mytag")) //获得的内容
}