有什么办法可以解决,包括一个无法访问的返回语句吗?

Mat*_*att 4 return go switch-statement

我有以下功能:

func fitrange(a, x, b int) int {
    if a > b {
        a, b = b, a
    }
    switch true {
    case x < a:
        return a
    case x > b:
        return b
    default:
        return x
    }
}
Run Code Online (Sandbox Code Playgroud)

go编译器抱怨"函数在没有return语句的情况下结束",即使语句中的每个可能路径都switch返回一个值.除了return在函数末尾添加一个虚拟语句之外,还有什么方法可以解决这个问题吗?

Rya*_*yan 10

在开关之后default一起拆下壳体return x.

喜欢:

func fitrange(a, x, b int) int {
    if a > b {
        a, b = b, a
    }
    switch true {
    case x < a:
        return a
    case x > b:
        return b
    }
    return x
}
Run Code Online (Sandbox Code Playgroud)


Son*_*nia 7

您可以通过添加恐慌来安抚编译器,而不是在最后添加返回.这不是一个坏主意,因为如果你的代码包含一个bug并且达到了"无法访问"的行,那么你的程序将立即停止而不是向前推进可能错误的答案.

  • @StephenWeinberg:我不同意.`panic("Unreachable")`远比你认为不会被命中的return语句好得多,因为a)它表示程序员期望这段代码无法访问,b)返回语句是预期的从来没有被击中可能不会返回一些合理的东西,所以最好是恐慌而不是潜在地破坏数据. (3认同)
  • 虽然这是事实,但我认为它不应该是正确的答案.函数末尾的'panic("unreachable")`唯一有意义的时候就是你有一个永不中断的无限for循环. (2认同)