tag中的一些用法我也是经常忘记,在这里总结一下。

例子1

  1. type PresignPara struct {
  2. Type string `json:"type" form:"type"`
  3. UUID string `json:"uuid" form:"uuid"`
  4. Name string `json:"name" form:"name"`
  5. FileSize int `json:"fileSize" form:"fileSize"`
  6. }
  7. // json和form,这两个tag是最常见的了,经常用于处理http请求中application/json和form-data

例子2

  1. type user struct {
  2. Name string `json:"name" binding:"required"`
  3. Email string `json:"email" binding:"required,email"`
  4. Address string `json:"email" binding:""`
  5. }
  6. // 这个就是常见binding校验,Name的校验要求json中name是必传的,Email中要求这个字段也是必传的,而且还必须为“email”
  7. // address这个字段没有强制设置binding

例子3

  1. // 还有两种比较常见的使用方式,那就是在json中使用tag "-" 和 “omitempty”
  2. // tag ""
  3. type Product struct {
  4. Name string `json:"name"`
  5. ProductID int64 `json:"-"` // 表示不进行序列化或者反序列化
  6. Number int `json:"number"`
  7. Price float64 `json:"price"`
  8. IsOnSale bool `json:"is_on_sale,string"`
  9. }
  10. // 序列化过后,可以看见
  11. {"name":"Xiao mi 6","number":10000,"price":2499,"is_on_sale":"false"}
  1. //omitempty,tag里面加上omitempy,可以在序列化的时候忽略0值或者空值, 这点很重要,我前面的理解一直有问题
  2. // Product _
  3. type Product struct {
  4. Name string `json:"name"`
  5. ProductID int64 `json:"product_id,omitempty"`
  6. Number int `json:"number"`
  7. Price float64 `json:"price"`
  8. IsOnSale bool `json:"is_on_sale,omitempty"`
  9. }
  10. func main() {
  11. p := &Product{}
  12. p.Name = "Xiao mi 6"
  13. p.IsOnSale = false
  14. p.Number = 10000
  15. p.Price = 2499.00
  16. p.ProductID = 0
  17. data, _ := json.Marshal(p)
  18. fmt.Println(string(data))
  19. }
  20. // {"name":"Xiao mi 6","number":10000,"price":2499}

参考:Golang json用法详解(一)

例子4

  1. //gorm中的tag,待补充