第十二:josn 传递参数 shouldBindJSON 和结构体的 db字段

链接: 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"`
}

Go 复制代码
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()
	}
}
相关推荐
人间打气筒(Ada)1 小时前
「码动四季·开源同行」go语言:如何处理 Go 错误异常与并发陷阱?
开发语言·后端·golang·defer·panic·errors·并发陷阱
女王大人万岁1 小时前
Golang实战gin-swagger:自动生成API文档
服务器·开发语言·后端·golang·gin
yangyanping2010810 小时前
Go语言学习之对象关系映射GORM
jvm·学习·golang
白毛大侠11 小时前
理解 Go 接口:eface 与 iface 的区别及动态性解析
开发语言·网络·golang
so2F32hj215 小时前
一款Go语言Gin框架DDD脚手架,适合快速搭建项目
开发语言·golang·gin
2301_8035545218 小时前
三大编程语言(Python/Go/C++)项目启动全解析
c++·python·golang
木子欢儿21 小时前
在 Fedora 上配置 Go 语言(Golang)开发环境
开发语言·后端·golang
yangyanping201081 天前
Go语言学习之 Gin 生产级 flag命令行参数解析库
开发语言·golang·gin
yangyanping201081 天前
Go语言学习之配置管理库Viper
开发语言·学习·golang
pixcarp1 天前
GORM基础入门使用教程
数据库·golang