面试题答案
一键面试在Go语言中,短路逻辑在条件表达式中,当通过前面的子表达式就能确定整个表达式的结果时,后面的子表达式将不会被求值。
逻辑与(&&
)的短路情况
逻辑与表达式中,只有当所有子表达式都为true
时,整个表达式才为true
。如果第一个子表达式为false
,由于整个表达式必然为false
,第二个子表达式不会被求值。
package main
import "fmt"
func main() {
a := false
b := true
result := a && func() bool {
fmt.Println("这个函数不会被调用")
return b
}()
fmt.Println(result)
}
在上述代码中,a
为false
,所以func() bool
这个函数不会被调用。
逻辑或(||
)的短路情况
逻辑或表达式中,只要有一个子表达式为true
,整个表达式就为true
。如果第一个子表达式为true
,由于整个表达式必然为true
,第二个子表达式不会被求值。
package main
import "fmt"
func main() {
a := true
b := false
result := a || func() bool {
fmt.Println("这个函数不会被调用")
return b
}()
fmt.Println(result)
}
在上述代码中,a
为true
,所以func() bool
这个函数不会被调用。