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 關注
- 294 瀏覽
添加回答
舉報