源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

Go语言中使用gorm小结

  • 时间:2020-10-13 23:11 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Go语言中使用gorm小结
[b]首先说明的是,在项目中使用orm的好处很多:[/b] [list=1] [*]防止直接拼接sql语句引入sql注入漏洞[/*] [*]方便对modle进行统一管理[/*] [*]专注业务,加速开发 [/*] [/list] [b]坏处也是显而易见的:[/b] [list=1] [*]开发者与最终的sql语句隔了一层orm,因此可能会不慎引入烂sql[/*] [*]依赖于orm的成熟度,无法进行一些「复杂」的查询。当然,复杂的查询一大半都是应该从设计上规避的[/*] [/list] [b]留意不合法的时间值[/b] MySQL的[code]DATE/DATATIME[/code]类型可以对应Golang的[code]time.Time[/code]。但是,如果[code]DATE/DATATIME[/code]不慎插入了一个无效值,例如2016-00-00 00:00:00, 那么这条记录是无法查询出来的。会返回[code]gorm.RecordNotFound[/code]类型错误。零值0000-00-00 00:00:00是有效值,不影响正常查询。 [b]留意tagsql:"default:null"[/b] gorm对各种tag的支持非常完善。但是有些行为跟直觉不太一致,需要注意。当对某字段设置[code]tagsql:"default:null"[/code]时,你想通过[code]update[/code]设置该字段为[code]null[/code]就不可能了,只能通过[code]raw sql[/code]。这是gorm设计的取向问题。 [b]如何通过gorm设置字段为null值[/b] 字段允许为[code]null[/code]值肯定是设计存在问题。但是,往往前人埋下的坑需要你去填。gorm作者给出了两种方法,以[code]string[/code]为例: 在golang中,声明该字段为[code]*string[/code] 使用[code]sql.NullString[/code]类型 推荐使用后者。 [b]留意连接串中的loc[/b] 例如通过如下连接串打开mysql连接:
[u]复制代码[/u] 代码如下:
db, err := gorm.Open("mysql", "db:dbadmin@tcp(127.0.0.1:3306)/foo?charset=utf8&parseTime=true&loc=Local")
[code]parseTime=true&loc=Local[/code]说明会解析时间,时区是机器的local时区。机器之间的时区可能不一致会设置有问题,这导致从相同库的不同实例查询出来的结果可能解析以后就不一样。因此推荐将loc统一设置为一个时区,如[code]parseTime=true&loc=America%2FChicago[/code] [b]总结[/b] 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部