在这个“去旅行”示例中,收益如何运作?

时间:2018-11-29 01:25:05

标签: go

这是我学习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"是否结束执行该函数或它如何正常工作?预先感谢。

3 个答案:

答案 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

     

Return statements

     

函数F中的“ return”语句终止F的执行,   并可选地提供一个或多个结果值。任何功能   由F延迟的操作在F返回其调用方之前执行。


规范定义了语言。 return终止功能。


  

Go Code Review Comments

     

Indent Error Flow

     

尝试使普通代码路径保持最小缩进,然后缩进   错误处理,首先处理它。这改善了   通过可视化扫描标准代码来提高代码的可读性   路径很快。例如,不要写:

if err != nil {
  // error handling
} else {
  // normal code
}
     

相反,写:

if err != nil {
  // error handling
  return // or continue, etc.
}
// normal code

尽管两者都可以使用,但从样式上来说,请删除不必要的else和缩进。这类似于错误流缩进。