使用gorm映射表单遇到的疑问
正在学 gorm 库,就想着写一个社工库练手,⚠️这里仅仅用于学习。在使用 automigrate() 函数映射表单时出现如下错误,这是为什么呢?
Code
InitDB
package dao
import (
"Hydra/config"
"Hydra/model"
"fmt"
"gorm.io/gorm/schema"
"log"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
var (
_DB *gorm.DB
)
// InitDB Connect to DB
func InitDB() {
cfg := config.GetConfig()
username := cfg.GetString("db.username")
password := cfg.GetString("db.password")
host := cfg.GetString("db.host")
port := cfg.GetInt("db.port")
dbname := cfg.GetString("db.dbname")
DSN := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local", username, password, host, port, dbname)
db, err := gorm.Open(mysql.New(mysql.Config{
DSN: DSN,
}), &gorm.Config{
Logger: logger.Default.LogMode(logger.Info),
NamingStrategy: schema.NamingStrategy{
TablePrefix: "hydra_",
SingularTable: true,
},
})
if err != nil {
log.Println("connect mysql failed, err: ", err)
}
// Map the form to the database
err = db.AutoMigrate(&model.Person{})
if err != nil {
log.Println("auto migrate err: ", err)
}
_DB = db
}
// DB return a *gorm.DB
func DB() *gorm.DB {
return _DB
}
Person model
package model
import "gorm.io/gorm"
// Person base structure describe person's base info.
type Person struct {
*gorm.Model
*Notes
Name string `gorm:"column:name" json:"name"`
Gender string `gorm:"column:gender" json:"gender"`
Birth string `gorm:"column:birth" json:"birth"`
BirthLocal string `gorm:"column:birth_local" json:"birthLocal"`
IDNumber string `gorm:"column:id_number" json:"IDNumber"`
BankCard uint `gorm:"column:bank_card" json:"bankCard"`
}
func (p Person) TableName() string {
return "person"
}
Person 父 struct
package model
// Notes describe something else remarks
type Notes struct {
Notes []string `gorm:"column:notes" json:"notes"`
}
func (n Notes) TableName() string {
return "notes"
}
main.go
package main
import (
"Hydra/config"
"Hydra/dao"
"Hydra/router"
"github.com/gin-gonic/gin"
)
func main() {
// Init Config
config.Config()
// Init Database
dao.InitDB()
// Run server
r := gin.Default()
router.InitRouter(r)
r.Run(":8080")
}
Err
tom:Hydra/ $ go run main.go [14:07:36]
2023/02/10 14:07:43 /Users/tom/go/src/Hydra/dao/InitDB.go:52
[error] unsupported data type: &[]
2023/02/10 14:07:43 /Users/tom/go/src/Hydra/dao/InitDB.go:52
[error] failed to parse value &model.Person{Model:(*gorm.Model)(nil), Notes:(*model.Notes)(nil), Name:"", Gender:"", Birth:"", BirthLocal:"", IDNumber:"", BankCard:0x0}, got error unsupported data type: &[]
2023/02/10 14:07:43 /Users/tom/go/src/Hydra/dao/InitDB.go:52
[error] unsupported data type: &[]
2023/02/10 14:07:43 /Users/tom/go/src/Hydra/dao/InitDB.go:52
[error] unsupported data type: &[]
2023/02/10 14:07:43 /Users/tom/go/src/Hydra/dao/InitDB.go:52
[error] failed to parse value &model.Person{Model:(*gorm.Model)(nil), Notes:(*model.Notes)(nil), Name:"", Gender:"", Birth:"", BirthLocal:"", IDNumber:"", BankCard:0x0}, got error unsupported data type: &[]
2023/02/10 14:07:43 /Users/tom/go/src/Hydra/dao/InitDB.go:52
[error] unsupported data type: &[]
2023/02/10 14:07:43 auto migrate err: unsupported data type: &[]
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
- using env: export GIN_MODE=release
- using code: gin.SetMode(gin.ReleaseMode)
推荐文章: