Go 中如何使用结构体标签
发布于: 刚刚

译者:baiyutang
原文:https://www.digitalocean.com/community/tutorials/how-to-use-struct-tags-in-go
介绍
结构体标签看起来是什么
type User struct { Name string `example:"name"`}复制代码
package main
import "fmt"
type User struct { Name string `example:"name"`}
func (u *User) String() string { return fmt.Sprintf("Hi! My name is %s", u.Name)}
func main() { u := &User{ Name: "Sammy", }
fmt.Println(u)}复制代码
它会输出
OutputHi! My name is Sammy复制代码
JSON 编码
{ "language": "Go", "mascot": "Gopher"}复制代码
package main
import ( "encoding/json" "fmt" "log" "os" "time")
type User struct { Name string Password string PreferredFish []string CreatedAt time.Time}
func main() { u := &User{ Name: "Sammy the Shark", Password: "fisharegreat", CreatedAt: time.Now(), }
out, err := json.MarshalIndent(u, "", " ") if err != nil { log.Println(err) os.Exit(1) }
fmt.Println(string(out))}复制代码
这会打印如下输出
{ "Name": "Sammy the Shark", "Password": "fisharegreat", "CreatedAt": "2019-09-23T15:50:01.203059-04:00"}复制代码
package main
import ( "encoding/json" "fmt" "log" "os" "time")
type User struct { name string password string preferredFish []string createdAt time.Time}
func main() { u := &User{ name: "Sammy the Shark", password: "fisharegreat", createdAt: time.Now(), }
out, err := json.MarshalIndent(u, "", " ") if err != nil { log.Println(err) os.Exit(1) }
fmt.Println(string(out))}复制代码
使用结构体标签控制编码
package main
import ( "encoding/json" "fmt" "log" "os" "time")
type User struct { Name string `json:"name"` Password string `json:"password"` PreferredFish []string `json:"preferredFish"` CreatedAt time.Time `json:"createdAt"`}
func main() { u := &User{ Name: "Sammy the Shark", Password: "fisharegreat", CreatedAt: time.Now(), }
out, err := json.MarshalIndent(u, "", " ") if err != nil { log.Println(err) os.Exit(1) }
fmt.Println(string(out))}复制代码
这会输出
{ "name": "Sammy the Shark", "password": "fisharegreat", "preferredFish": null, "createdAt": "2019-09-23T18:16:17.57739-04:00"}复制代码
移出结构体空字段
package main
import ( "encoding/json" "fmt" "log" "os" "time")
type User struct { Name string `json:"name"` Password string `json:"password"` PreferredFish []string `json:"preferredFish,omitempty"` CreatedAt time.Time `json:"createdAt"`}
func main() { u := &User{ Name: "Sammy the Shark", Password: "fisharegreat", CreatedAt: time.Now(), }
out, err := json.MarshalIndent(u, "", " ") if err != nil { log.Println(err) os.Exit(1) }
fmt.Println(string(out))}复制代码
这个例子将输出
{ "name": "Sammy the Shark", "password": "fisharegreat", "createdAt": "2019-09-23T18:21:53.863846-04:00"}复制代码
忽略私有字段
package main
import ( "encoding/json" "fmt" "log" "os" "time")
type User struct { Name string `json:"name"` Password string `json:"-"` CreatedAt time.Time `json:"createdAt"`}
func main() { u := &User{ Name: "Sammy the Shark", Password: "fisharegreat", CreatedAt: time.Now(), }
out, err := json.MarshalIndent(u, "", " ") if err != nil { log.Println(err) os.Exit(1) }
fmt.Println(string(out))}复制代码
当你运营这个例子,你将看到这个输出:
{ "name": "Sammy the Shark", "createdAt": "2019-09-23T16:08:21.124481-04:00"}复制代码
总结
划线
评论
复制
发布于: 刚刚阅读数: 4
版权声明: 本文为 InfoQ 作者【baiyutang】的原创文章。
原文链接:【http://xie.infoq.cn/article/0cc2cf0a03a5974f7c518a639】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
baiyutang
关注
广州 2017.12.13 加入
Microservices | Golang | Cloud Nitive | “Smart work,Not hard”











评论