V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
lhx2008
V2EX  ›  问与答

GORM 的默认 go struct 里面的指针成员变量怎么理解呢

  •  
  •   lhx2008 · 2020-01-31 14:41:57 +08:00 · 2329 次点击
    这是一个创建于 1788 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://github.com/jinzhu/gorm/blob/master/model.go

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

    CreatedAt 和 UpdatedAt 都是非指针,DeletedAt 用了指针,这后面应该怎么理解呢

    4 条回复    2020-02-02 17:02:52 +08:00
    jingniao
        1
    jingniao  
       2020-01-31 14:46:13 +08:00 via Android   ❤️ 2
    指针允许空吧,不是指针的是非空
    tairan2006
        2
    tairan2006  
       2020-01-31 15:34:43 +08:00 via Android   ❤️ 1
    1 楼正解,time.Time 的默认值是 0000-00-00
    chotow
        3
    chotow  
       2020-01-31 16:52:09 +08:00 via iPhone
    举个例子,以 JSON 格式打印一个零值结构体时,非指针的结果是默认值,指针是 null。
    这是一个点,还有的就是赋值写入等,可以再摸一下文档。
    snoooow
        4
    snoooow  
       2020-02-02 17:02:52 +08:00   ❤️ 1
    结构体中的零值不会出现在 gorm 构造的查询条件中,但指针例外。然后删除一般是软删除,DeletedAt 字段初始为零值,删除之后会有值。把 DeletedAt 弄成指针,查询的时候就会自然带上 DeletedAt == nil,就能查到未删除的数据,而 CreatedAt 和 UpdatedAt 没有这种需求。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3184 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 12:43 · PVG 20:43 · LAX 04:43 · JFK 07:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.