当我们用另一个struct包装时,Gorm golang sql.NullInt64无法正常工作

时间:2017-04-29 23:09:37

标签: go go-gorm

用户可以被其他用户删除。在那种情况下,

type User struct {
    gorm.Model
    Email string `gorm:"type:varchar(100)"`
    DeletedBy     sql.NullInt64
}

当我们创建新用户时,DeletedBy将为null。所以我使用sql.NullInt64而不是int64。 但我无法转换为JSON。

  

{" Email":" xxxxx",   " DeletedBy&#34 ;:   {"的Int64":2"有效":真}   }

为此,我尝试了https://gist.github.com/smagch/bc34f861df65c8ea2e90 但Gorm将查询条件值发送为" [{2,true}]"

1 个答案:

答案 0 :(得分:2)

在Go中,当您将类型声明为另一种类型的别名时,新类型无法保持其他类型的方法。所以这里:

type NullInt64 sql.NullInt64

您的新NullInt64类型具有与sql.NullInt64 相同的结构和内存布局,但它没有其方法,即Scan和{{3它需要的方法以你想要的方式工作。

相反,你可以做的是嵌入sql.NullInt64,你应该好好去。

type NullInt64 struct {
    sql.NullInt64
}