GORM Playground Link

https://github.com/go-gorm/playground/pull/1

Description

某些场景下,我希望通过Model接口,动态地根据数据模型的属性值决定最终的TableName,但是实际是失效的。 下面列举了简单的复现步骤

假设我定义了了一个数据模型:

type Account struct {
    Id       int    `gorm:"primaryKey;id"`
    UserName string `gorm:"unique; user_name"`
    Money    int    `gorm:"money"`
    Market   string `gorm:"market"`
    tblName  string `gorm:"-"`
}
func (a *Account)TableName() string {
    return a.tblName
}

当我按照以下用法使用时: db.Model(&Account{tblName: "acc_tab_01"}).Create(data) 此时生成的SQL语句中一定会缺失TableName。 因为gorm内部在生成TableName时,并不是使用我在Model接口传入的Account实例。而是通过反射机制,基于Account实例的数据类型,构造了一个新的实例,因此所有的成员信息全部丢失

Comment From: jinzhu

by design, use Table