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 模型定义中,字段指针和非指针的区别是什么?的详细内容,更多请关注其它相关文章!