[Go 编程语言] 问一个 golang 新手问题,一个 golang 的 struct 使用了 json fields,怎么在导入的时候加入其他的 fields?

比如说我在 models 里面定义了一个 user struct 绑定了 json fields ,数据操作层可能有不同的实现,因为数据库可能有多个不同的实现,比如说用 orm 来进行数据库的 curd 要增加 orm 的 fields ,使用 mongodb 的 drver 来进行 nosql 的的 curd 要增加 mongodb 的 bson 的 fields.

想做到操作层和 model 层的分离,有什么好的项目实践方法?

写了个 demo ,发现实现起来太笨了。

package repo import ( "context" "time" "gin-base/models" "github.com/uptrace/bun"
) // bunUserRepository bun ORM user struct
type bunUserRepostiory struct { DB *bun.DB
} type bunUser struct { bun.BaseModel `bun:"table:users"` ID uint64 `bun:"id,pk,autoincrement"` Username string `bun:"username,notnull"` Password string `bun:"password,notnull"` Nickname string `bun:"nickname"` CreateAt time.Time `bun:"create_at,nullzero,notnull,default:current_timestamp"` UpdateAt time.Time `bun:"update_at,nullzero,notnull,default:current_timestamp"` DeleteAt time.Time `bun:"delete_at,soft_delete,nullzero,notnull,default:current_timestamp"`
} func (bu *bunUser) Model() (mu *models.User) { mu.ID = bu.ID mu.Username = bu.Username mu.Password = bu.Password mu.Nickname = bu.Nickname mu.CreateAt = bu.CreateAt mu.UpdateAt = bu.UpdateAt mu.DeleteAt = bu.DeleteAt return mu } func NewBunUserRepostiory(DB *bun.DB) *bunUserRepostiory { return &bunUserRepostiory{DB: DB}
} func (b *bunUserRepostiory) Create(ctx context.Context, newUser *bunUser) (u *models.User, err error) { _, err = b.DB.NewInsert().Model(newUser).Exec(ctx) u = newUser.Model() return
}