[Golang] struct tags
[Golang] struct tags

[Golang] struct tags

剛接觸Go時,看別人的程式碼會出現類似下面的struct,但又搞不懂能做什麼

type Person struct {
        Name       string    `form:"name"`
        Address    string    `form:"address"`
}

在整理json資料或者form資料時會常用到,會自動幫你把值bind進去新實例的struct,如:

package main

import (
    "encoding/json"
    "fmt"
    "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:      "Sam chen",
        Password:  "9527",
        CreatedAt: time.Now(),
    }

    out, err := json.MarshalIndent(u, "", "  ")
    if err != nil {
        log.Println(err)
        os.Exit(1)
    }

    fmt.Println(string(out))
}

//{
//"Name": "Sam chen",
//"Password": "9527",
//"PreferredFish": null,
//"CreatedAt": "2009-11-10T23:00:00Z"
//}

另外,後面的tag也可以指定該參數的行為,適合用在form表驗證參數的屬性使用,如

type LoginForm struct {
    Account  string `form:"account" binding:"required"`
    Password string `form:"password" binding:"required"`
}

如此一來,當要實例LoginForm時,必須帶入accountpassword的值

當有些程式碼想實驗,但剛好沒有這個環境,你可以使用官方的工具操作

參考:
How To Use Struct Tags in Go