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 := user1fmt.Println(user2.Email) // 输出:"john@example.com"user1.Email = "new.email@example.com"fmt.Println(user2.Email) // 输出:"new.email@example.com" (受影响)
登录后复制
以上就是GORM 模型定义中,字段指针和非指针的区别是什么?的详细内容,更多请关注【创想鸟】其它相关文章!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。