これは、タグ付けされたフィールドでパッケージがどのように処理されるかを指定するある種の仕様です。
例えば:
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パッケージに提供します。これにより、これらのフィールドは必要に応じてタグ付けされます。
したがって、一般的にタグは、パッケージがタイプの異なる構造体のデータをどのように処理するかを知るために必要なデータであり、パッケージが必要とするタグに精通するための最良の方法は、パッケージドキュメントを完全に読むことです。