タグ付けされたフィールドをパッケージがどのように処理するかを指定するのは、ある種の仕様です。
例えば:
type User struct {
FirstName string `json:"first_name"`
LastName string `json:"last_name"`
}
jsonタグはjson
、次のユーザーの出力をマーシャリングしたことをパッケージに通知します
u := User{
FirstName: "some first name",
LastName: "some last name",
}
次のようになります:
{"first_name":"some first name","last_name":"some last name"}
他の例は、gorm
パッケージタグがデータベースの移行を行う方法を宣言するものです。
type User struct {
gorm.Model
Name string
Age sql.NullInt64
Birthday *time.Time
Email string `gorm:"type:varchar(100);unique_index"`
Role string `gorm:"size:255"` // set field size to 255
MemberNumber *string `gorm:"unique;not null"` // set member number to unique and not null
Num int `gorm:"AUTO_INCREMENT"` // set num to auto incrementable
Address string `gorm:"index:addr"` // create index with name `addr` for address
IgnoreMe int `gorm:"-"` // ignore this field
}
この例ではEmail
、gormタグが付いたフィールドで、フィールドemailのデータベース内の対応する列のタイプがvarcharで最大長が100であり、一意のインデックスも必要であることを宣言しています。
他の例はbinding
、gin
パッケージで非常に多く使用されるタグです。
type Login struct {
User string `form:"user" json:"user" xml:"user" binding:"required"`
Password string `form:"password" json:"password" xml:"password" binding:"required"`
}
var json Login
if err := c.ShouldBindJSON(&json); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
この例のバインディングタグは、APIに送信されるデータにユーザーフィールドとパスワードフィールドが必要であり、これらのフィールドが必要に応じてタグ付けされていることをginパッケージに示唆しています。
したがって、一般的なタグは、パッケージがタイプの異なる構造体のデータをどのように扱うかを知るためにパッケージが必要とするデータであり、パッケージが必要とするタグに精通する最良の方法は、パッケージドキュメントの完全な読み取りです。