链接: Golang教程三(结构体、自定义数据类型,接口)_golang 自定义数据类型-CSDN博客
结构体指向 json 和数据库的 db
type User struct {
ID int `json:"id" db:"user_id"`
Name string `json:"name" db:"user_name"`
}
// db:"id" 表示 ID 字段对应数据库中的 "id" 字段。
// sql:",notnull" 指定 Name 字段在数据库中不允许为 NULL。
type User struct {
ID int `db:"id"`
Name string `sql:",notnull"`
}
// json:"id" 指定了在JSON中,ID 字段映射为 "id";
// json:"name,omitempty" 表示在序列化时,如果 Name 字段值为空,则不包含该字段;
type User struct {
ID int `json:"id"`
Name string `json:"name,omitempty"`
}
package main
import (
"fmt"
"reflect"
)
type User struct {
ID int `json:"id" db:"user_id"`
Name string `json:"name" db:"user_name"`
}
func main() {
// 创建一个User实例
u := User{ID: 1, Name: "Alice"}
// 获取User类型反射值
userValue := reflect.ValueOf(u)
userType := userValue.Type()
// 遍历User的字段
for i := 0; i < userType.NumField(); i++ {
field := userType.Field(i)
// 获取字段名
fieldName := field.Name
fmt.Printf("Field Name: %s\n", fieldName)
// 获取字段标签(假设我们关心的是json和db标签)
jsonTag := field.Tag.Get("json")
dbTag := field.Tag.Get("db")
fmt.Printf("json Tag: %s\n", jsonTag)
fmt.Printf("db Tag: %s\n", dbTag)
// 输出标签值或默认值(如果不存在)
if jsonTag != "" {
fmt.Printf("JSON mapping: %s -> %s\n", fieldName, jsonTag)
} else {
fmt.Printf("No JSON tag for field %s\n", fieldName)
}
if dbTag != "" {
fmt.Printf("DB mapping: %s -> %s\n", fieldName, dbTag)
} else {
fmt.Printf("No DB tag for field %s\n", fieldName)
}
fmt.Println()
}
}