登录
首页 >  Golang >  Go教程

GORM 模型定义中,字段指针和非指针的区别是什么?

时间:2024-11-05 21:16:04 466浏览 收藏

大家好,今天本人给大家带来文章《GORM 模型定义中,字段指针和非指针的区别是什么?》,文中内容主要涉及到,如果你对Golang方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!

GORM 模型定义中,字段指针和非指针的区别是什么?

gorm模型定义中字段指针和非指针的区别

使用gorm定义模型时,字段类型可以是值类型(如string) 或指针类型(如*string)。

非指针类型(值类型)

非指针类型直接保存字段的值。当对字段进行赋值或修改时,实际上是修改了字段本身,不会影响其他地方对该字段的引用。

指针类型

指针类型保存的是字段的内存地址。当对字段进行赋值或修改时,实际上是修改了指向的内存地址,从而影响了其他地方对该字段的引用。

用法场景

  • 非指针类型:适用于不需要与其他地方共享字段值的场景,例如主键、唯一索引字段。
  • 指针类型:适用于需要与其他地方共享字段值的场景,例如外键、联合索引字段。

示例

考虑以下模型:

type user struct {
  id           uint
  name         string
  email        *string
  age          uint8
  birthday     *time.time
  membernumber sql.nullstring
  activatedat  sql.nulltime
  createdat    time.time
  updatedat    time.time
}
  • name 是非指针类型,修改user.name不会影响其他地方对user.name的引用。
  • email 是指针类型,修改user.email实际上是修改了指向的内存地址,从而影响了其他地方对user.email的引用。例如,假设user1和user2指向同一行数据的不同实例:
user1 := User{Email: "john@example.com"}
user2 := user1
fmt.Println(user2.Email) // 输出:"john@example.com"
user1.Email = "new.email@example.com"
fmt.Println(user2.Email) // 输出:"new.email@example.com" (受影响)

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>