登录
首页 >  Golang >  Go问答

Go中的短路评估

来源:Golang技术栈

时间:2023-04-06 08:14:32 116浏览 收藏

亲爱的编程学习爱好者,如果你点开了这篇文章,说明你对《Go中的短路评估》很感兴趣。本篇文章就来给大家详细解析一下,主要介绍一下golang,希望所有认真读完的童鞋们,都有实质性的提高。

问题内容

我对短路评估的理解是,仅在 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 ,看看它是真的而不费心评估其他条件吗?

编辑:错误地将短路评估称为惰性评估

正确答案

感谢 Kostix 和 mkrieger 的回答——他们是正确的,我指的是短路评估而不是惰性评估。

Go 确实实现了正常的短路评估,可以通过以下代码推断:

package main

import "fmt"

func main() {
    for i := 0; i 

...这将永远给出:

$ function 1 called
$ function 1 called
$ function 1 called
$ function 1 called
$ function 1 called
$ function 1 called
$ function 1 called
$ function 1 called
$ function 1 called
$ function 1 called

好了,本文到此结束,带大家了解了《Go中的短路评估》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表