这是我学习Go的第一周。我正在检查Tour of Go,并且在https://tour.golang.org/flowcontrol/5中的代码中,我不了解return在sqrt()函数内部的工作方式。
func sqrt(x float64) string {
if x < 0 {
return sqrt(-x) + "i"
}
return fmt.Sprint(math.Sqrt(x))
}
我理解带有else子句的代码
func sqrt(x float64) string {
if x < 0 {
return sqrt(-x) + "i"
}else{
return fmt.Sprint(math.Sqrt(x))}
}
此代码的执行没有问题,但是VsCode中的golint建议我删除else子句。
if内的return sqrt(-x) + "i"
是否结束执行该函数或它如何正常工作?预先感谢。
答案 0 :(得分:1)
与大多数(如果不是全部?)返回一样,编译器命中的第一个return语句将退出该函数,并且不会继续。
答案 1 :(得分:0)
这是go linter报告的警告。下面的代码有效。
student_id
下面的这个也是有效的,但是会产生一些警告。
func sqrt(x float64) string {
if x < 0 {
return sqrt(-x) + "i"
}
return fmt.Sprint(math.Sqrt(x))
}
基本上,如果有func sqrt(x float64) string {
if x < 0 {
return sqrt(-x) + "i"
} else {
return fmt.Sprint(math.Sqrt(x))
}
}
语句且正文包含if
语句,最好不要使用return
块。
答案 2 :(得分:0)
The Go Programming Language Specification
函数F中的“ return”语句终止F的执行, 并可选地提供一个或多个结果值。任何功能 由F延迟的操作在F返回其调用方之前执行。
规范定义了语言。 return
终止功能。
尝试使普通代码路径保持最小缩进,然后缩进 错误处理,首先处理它。这改善了 通过可视化扫描标准代码来提高代码的可读性 路径很快。例如,不要写:
if err != nil { // error handling } else { // normal code }
相反,写:
if err != nil { // error handling return // or continue, etc. } // normal code
尽管两者都可以使用,但从样式上来说,请删除不必要的else
和缩进。这类似于错误流缩进。