2

gorm 在文档中告诉“基本模型定义 gorm.Model,包括字段 ID、CreatedAt、UpdatedAt、DeletedAt,您可以将其嵌入到您的模型中,或者只编写您想要的那些字段”:

// Base Model's definition
type Model struct {
  ID        uint `gorm:"primary_key"`
  CreatedAt time.Time
  UpdatedAt time.Time
  DeletedAt *time.Time
}

// Add fields `ID`, `CreatedAt`, `UpdatedAt`, `DeletedAt`
type User struct {
  gorm.Model
  Name string
}

// Only need field `ID`, `CreatedAt`
type User struct {
  ID        uint
  CreatedAt time.Time
  Name      string
}

按照文档,我希望只有一个用户定义,所以我创建了一个这样的对象:

type User struct {
  gorm.Model
  ID        uint
  CreatedAt time.Time
  Name      string
}

但如果我执行 a DB.CreateTable(&User{}),我会从 postgres 收到以下错误:

(pq: column "id" specified more than once)
(pq: column "created_at" specified more than once)

所以我必须有两个不同的对象:

type CreateUser struct {
  gorm.Model
  Name string
}

type RetrieveUser struct {
  gorm.Model
  ID        uint
  CreatedAt time.Time
  Name      string
}

所以我可以做一个DB.CreateTable(&CreateUser{})

它非常难看,我一定遗漏了一些东西,知道吗?

4

1 回答 1

3

好的,只需阅读后面的代码gorm.Model,我就得到了答案。

type Model struct {
    ID        uint `gorm:"primary_key"`
    CreatedAt time.Time
    UpdatedAt time.Time
    DeletedAt *time.Time `sql:"index"`
}

这意味着我只是学习了继承在 go 中的工作方式!

于 2016-12-09T21:56:46.753 回答