为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 中使用从 Gorm 查询的指针来操作结构体?

在 Go 中使用从 Gorm 查询的指针来操作结构体?

Go
慕姐4208626 2023-07-26 17:25:01
我正在练习使用 Gqlgen 和 Gorm(postgres 方言)开发用 Go 编写的 Web 服务器。我首先描述我的用户模型:# dbm.User{}type User struct {    BaseModel          Email       string  `gorm:"not null;unique_index:idx_email"`    UserID      *string // External user ID    Name        *string    NickName    *string    FirstName   *string    LastName    *string    Location    *string `gorm:"size:1048"`    Description *string `gorm:"size:1048"`}在这种情况下,根据我的理解,最好对结构中的某些值使用指针,因为它们可以<nil>在没有附加值时进行评估。然而,如果我不使用指针,如果没有附加任何值,则 int 将为 0。好吧,这是有道理的……如果我没记错的话……然而,我现在面临的困难是从数据库上的 Gorm 操作中获取这个值时:dbRecord := &dbm.User{}db = db.Where(whereEmail, email).Find(&dbRecord)fmt.Println("dbRecord:", dbRecord)// Prints:// dbRecord: &{{def90b3c-93ff-40f0-8d33-6320dddbe3f2 2019-10-01 14:16:34.365395 +0200 CEST 2019-10-01 14:16:34.365395 +0200 CEST} test@test.com <nil> 0xc0000a1cb0 0xc0000a1cd0 0xc0000a1cc0 <nil> 0xc0000a1cf0 0xc0000a1ce0}此代码查询电子邮件为“email@email.com”的用户,显然结构中的某些字段指向该值的实际地址。这是有道理的,但是如果我想读取这些数据就很烦人了。有读取这些数据的传统方法吗?我尝试的是将这个结构转换为 GQL 结构(由 GQLgen 自动生成):# gqlm.User{}type User struct {    ID          string     `json:"id"`    Email       string     `json:"email"`    UserID      *string    `json:"userId"`    Name        *string    `json:"name"`    FirstName   *string    `json:"firstName"`    LastName    *string    `json:"lastName"`    NickName    *string    `json:"nickName"`    Description *string    `json:"description"`    Location    *string    `json:"location"`    CreatedAt   time.Time  `json:"createdAt"`    UpdatedAt   *time.Time `json:"updatedAt"`}但同样,当我需要值时,我会得到地址,这是有道理的。但这似乎太过分了,如果我每次需要从数据库读取数据时都需要创建这样的结构,那么需要付出很多努力。这是要走的路吗?或者你知道更方便的方法吗?
查看完整描述

1 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

您需要使用 sql.NullString 作为字符串指针类型。

具体来说,使用 sql null 类型,其中存在“此字段没有有效值”的概念是有意义的。


查看完整回答
反对 回复 2023-07-26
  • 1 回答
  • 0 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信