Горм говорят в документации, что «определение Базовая модель gorm.Model, включая поля ID, CreatedAt, UpdatedAt, DeletedAt, вы можете вставлять его в вашей модели, или писать только те поля, которые вы хотите»:Нужно ли иметь два разных объекта для чтения и записи в моей базе данных с помощью gorm (golang)?
// 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
}
Но если я делаю 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{})
Это очень некрасиво, и я должен быть что-то отсутствует, какие-либо идеи?
В Go нет наследования. Вы захотите посмотреть [Struct Embedding] (https://golang.org/doc/effective_go.html#embedding) – JimB
Благодарим вас за эту важную точность! – Adrien