在Go语言中,结构体标签(Struct Tags)是一种元信息,用于为结构体的字段提供额外的说明。它们通常用于JSON编码/解码、数据库映射等场景。要使用结构体标签,需要在字段声明后面加上一个反引号(`),然后包含键值对,用冒号分隔。
以下是一些常见的使用场景:
- JSON编码/解码:
package main import ( "encoding/json" "fmt" ) type Person struct { Name string `json:"name"` Age int `json:"age"` Address string `json:"address,omitempty"` } func main() { p := Person{ Name: "Alice", Age: 30, Address: "", } data, _ := json.Marshal(p) fmt.Println(string(data)) // 输出:{"name":"Alice","age":30} var p2 Person _ = json.Unmarshal(data, &p2) fmt.Println(p2) // 输出:{Alice 30} }
在这个例子中,我们为Person
结构体的字段添加了JSON标签,用于指定JSON编码时的键名。omitempty
选项表示如果字段值为空,则在编码时忽略该字段。
- 数据库映射:
package main import ( "fmt" "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/sqlite" ) type User struct { ID uint `gorm:"primary_key"` FirstName string `gorm:"column:first_name"` LastName string `gorm:"column:last_name"` } func main() { db, _ := gorm.Open("sqlite3", "test.db") defer db.Close() db.AutoMigrate(&User{}) user := User{FirstName: "John", LastName: "Doe"} db.Create(&user) var users []User db.Find(&users) fmt.Println(users) // 输出:[{1 John Doe}] }
在这个例子中,我们使用GORM库为User
结构体的字段添加了数据库映射标签,用于指定数据库表中的列名。
这些只是结构体标签的一些常见用法。你可以根据需要为结构体的字段添加更多的标签,以满足不同的需求。