2 回答

TA贡献1802条经验 获得超10个赞
可能的解决方案
解决方案是从模型中检索(«解析»)模式。
请注意:来自模型——而不是来自“物理”数据库。
参考
如何获取结构/模型字段和数据库列的 map[string]string?· 问题 #5114 · go-gorm/gorm。
解决方案评论:tzinckgraf于 3 月 4 日发表评论。
稍微相关的问题。go - 如何从 gorm 中的模型中获取表名?- 堆栈溢出。
示例程序草稿
go.mod
module gorm/example
go 1.18
require (
github.com/google/uuid v1.3.0
gorm.io/gorm v1.23.8
)
require (
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.4 // indirect
)
go.sum
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
github.com/jinzhu/now v1.1.4 h1:tHnRBy1i5F2Dh8BAFxqFzxKqqvezXrL2OW1TnX+Mlas=
github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
gorm.io/gorm v1.23.8 h1:h8sGJ+biDgBA1AD1Ha9gFCx7h8npU7AsLdlkX0n2TpE=
gorm.io/gorm v1.23.8/go.mod h1:l2lP/RyAtc1ynaTjFksBde/O8v9oOGIApu2/xRitmZk=
程序 ( main.go)
package main
import (
"fmt"
"github.com/google/uuid"
"gorm.io/gorm"
"gorm.io/gorm/schema"
"sync"
"time"
)
type Person struct {
ID uuid.UUID `gorm:"type:uuid;default:uuid_generate_v4()"`
Name string `gorm:"not null,type:text"`
CreatedAt time.Time `gorm:"autoCreateTime"`
UpdatedAt time.Time `gorm:"autoUpdateTime"`
DeletedAt gorm.DeletedAt `gorm:"index,->"`
}
func main() {
s, err := schema.Parse(&Person{}, &sync.Map{}, schema.NamingStrategy{})
if err != nil {
panic("failed to parse schema")
}
m := make(map[string]string)
for _, field := range s.Fields {
dbName := field.DBName
modelName := field.Name
m[modelName] = dbName
}
fmt.Println("Model to schema field name map:", m)
fmt.Println("CreatedAt field is mapped to", m["CreatedAt"], "column")
}
建造
$ go build main.go
跑步
$ ./main
输出
Model to schema field name map: map[CreatedAt:created_at DeletedAt:deleted_at ID:id Name:name UpdatedAt:updated_at]
CreatedAt field is mapped to created_at column

TA贡献1862条经验 获得超7个赞
使用这样的标签:
gorm:“列:uid”
type UserInfo struct {
Uid int `json:"uid" gorm:"column:uid" form:"uid"`
Uname string `json:"uname" gorm:"column:uname" form:"uname"`
}
- 2 回答
- 0 关注
- 311 浏览
添加回答
举报