go传入不定参数的问题

问题

使用beego框架,注册models时,报错:

panic: <orm.RegisterModel> cannot use non-ptr model struct `.`

看描述应该是要传入指针,但是我传了指针了(new)

main.go

package db

import (
    "github.com/astaxie/beego/orm"
)

func InitDB(models ...interface{}) {
    orm.RegisterDriver("mysql", orm.DRMySQL)
    // set default database
    orm.RegisterDataBase("default", "mysql", "root:*****@tcp(127.0.0.1:3306)/db_test?charset=utf8", 30)
    // register model
    orm.RegisterModel(models)
    // create table
    orm.RunSyncdb("default", false, true)
}

db/main.go

package db

import (
    "github.com/astaxie/beego/orm"
)

func InitDB(models ...interface{}) {
    orm.RegisterDriver("mysql", orm.DRMySQL)
    // set default database
    orm.RegisterDataBase("default", "mysql", "root:123456@tcp(127.0.0.1:3306)/db_test?charset=utf8", 30)
    // register model
    orm.RegisterModel(models)
    // create table
    orm.RunSyncdb("default", false, true)
}

models/user.go

package models

import "hello/db"

type User struct {
    Uid      int `orm:"pk"`
    Username string
    Password string
}

db/main.go中的InitDB函数注册models,然后报错了

beego文档

clipboard.png

应该是语法上的问题

阅读 5.4k
1 个回答

models ...interface{} 语法的参数接收到之后 models 应该是 []interface{}
所以原样传递给 RegisterModel 时 应该 orm.RegisterModel(models...) 这样写

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题