Open xbcbupt725 opened 6 years ago
超大的问题
Limit 0 有什么意义吗?
Limit 0 有什么意义吗?
就说说我的遭遇,我搞了某个后台定时任务,通过配置文件就控制LimitN。一开始不希望任务执行,设置LimitN = 0。结果就······
在 golang 中,由于零值的原因,在逻辑判断中不能很好的判断这个 0
究竟是系统初始值抑或是用户有意为之(因此在框架中我们当作“未给出限制”来处理)。建议“不希望任务执行”这种行为由开关来控制,而不是用一些特殊值来进行一些tricky的操作:这样会降低代码的可读性,并且对框架的功能特性产生强依赖。希望建议对您有用 :)
在 golang 中,由于零值的原因,在逻辑判断中不能很好的判断这个
0
究竟是系统初始值抑或是用户有意为之(因此在框架中我们当作“未给出限制”来处理)。建议“不希望任务执行”这种行为由开关来控制,而不是用一些特殊值来进行一些tricky的操作:这样会降低代码的可读性,并且对框架的功能特性产生强依赖。希望建议对您有用 :)
可以把Statement中的LimitN改为*int, 不是nil的话, 就表示设置了.nil的话, 表示没有设置.
@xbcbupt725 自己加个if啊,为0时性能还更好,至少不用请求数据库。
@Frank-Hust 嗯。这个可以通过改造Limit()
函数来解决,关键看是否有那个必要。
在 golang 中,由于零值的原因,在逻辑判断中不能很好的判断这个
0
究竟是系统初始值抑或是用户有意为之(因此在框架中我们当作“未给出限制”来处理)。建议“不希望任务执行”这种行为由开关来控制,而不是用一些特殊值来进行一些tricky的操作:这样会降低代码的可读性,并且对框架的功能特性产生强依赖。希望建议对您有用 :)可以把Statement中的LimitN改为*int, 不是nil的话, 就表示设置了.nil的话, 表示没有设置.
因为 golang 不可以直接取基本元素的字面量引用,这样反而会让编码更加麻烦,而且0的话,其实已经可以在外层控制的
很多时候比如翻页,是前端传过来的参数,写代码的人只对了最大值做限制,而没有对0判断,原本以为会是limit 0,结果现在把所有数据都查一遍了
if session.statement.LimitN > 0 { orderSQL += fmt.Sprintf(" LIMIT %d", session.statement.LimitN) }
这里 select * from xxx limit 0 原本是查询0个。但是通过xorm去limit相当于没有限制。