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

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" (受影响)

以上就是GORM 模型定义中,字段指针和非指针的区别是什么?的详细内容,更多请关注其它相关文章!