上个周未花了一个周未做成的,说明 GO 写起来程序还算是挺简单的
功能类似 ActiveRecord, 目前我自己用起来感觉挺爽的,甚至某些地方比 ActiveRecord 还爽。。。。。。
目前支持的功能
不过现在只是社会主义的初期阶段,还有一些功能没有完成。。。轻拍。。。。
刚刚优化了下 first_or_initialize, first_or_create 的功能。。。
我们在建一个对象的时候经常性的会有这种问题,例如:
根据邮箱查询一个用户,如果查到的话就找出来,如果没有查到就创建他,并且把本次请求的 IP 记录下来
这是个经常性我写起来感觉很恶心的地方,用 Rails 也要这样子写:
user = User.where(email: '[email protected]').first_or_create
if user.from_ip.blank?
user.update_attribute(:from_ip, "111.111.111.111") // 会有3条SQL, 查询,创建,更新
end
并且还不太贴合要求,最贴合要求的实现应该是
user = User.where(email: '[email protected]').first_or_initialize
if user.new_record?
user.from_ip = "111.111.111.111"
user.save
end
经过我的改进版的 gorm 后,可以这样子写了:
db.Where(User{Email: "[email protected]"}).Attrs(User{FromIp: "111.111.111.111"}).FirstOrCreate(&User{})
感觉用起来帅多了。。。
@yakczh 不清楚分布式文件系统的实现,但我感觉所谓的适合不适合和语言无关,要关注的是需要的性能以及开发时间的平衡。。。
这还取决于你的需求,用来存大文件的分布式文件系统,和小文件,只写不读的,只读不写的要求完全不一样。。。
没有研究没有发言权,所以我也不能给你什么有用的建议。。。
Go 里面那个 db 支持 connection pool 吗? 还有那个 db.where 在 go 里面 能实现比如 user.where 这样的吗?
Go 里面那个 db 支持 connection pool 吗?
支持
还有那个 db.where 在 go 里面 能实现比如 user.where 这样的吗?
在 Go 里不能 Hack 其它的库,所以不能实现这种方法,不过你可以自己填加一下,也很简单。
不过我感觉在使用 db.where 以后,感觉还不错,特别对于使用不同的数据库来查询不同的数据的程序来说,挺方便的,例如你可以建议一个 db1,db2
gorm 非常好用,golang123 社区用到了 gorm,在此对作者表示感谢
golang123 - 使用 vue、nuxt、nodejs 和 golang 开发的社区系统
地址:https://www.golang123.com
Github: https://github.com/shen100/golang123