【发布时间】:2019-05-12 08:01:17
【问题描述】:
我对短路评估的理解是,只有在 if 语句中需要时才调用表达式。 Go 会遵循这个吗?
例如,我是否会从以下方面获得更好的平均性能:
if !isValidQueryParams(&queries) || r == nil || len(queries) == 0 {
return "", fmt.Errorf("invalid querystring")
}
...到这个:
if r == nil || len(queries) == 0 || !isValidQueryParams(&queries) {
return "", fmt.Errorf("invalid querystring")
}
...因为isValidQueryParams 是一个比r == nil 开销更大的函数或测试地图的长度?
即解释器会先评估 r == nil,看看它是真的,而不费心去评估其他条件吗?
编辑:错误地将短路评估称为惰性评估
【问题讨论】:
-
我认为惰性求值通常是指一个变量,其值在被访问之前不会被计算或获取(例如从数据库或 API)。
-
有点相关:Go 代码中存在短路评估,但 Go 的模板引擎不使用短路评估。详情:Golang template and testing for Valid fields
-
@icza,谢谢,包括在内。
标签: go short-circuiting