小编典典

Go为什么有“ goto”语句

go

我惊讶地发现Go带有“ goto”语句。我一直被教导说,“
goto”语句已经成为过去,并且因为它阻塞了程序的实际流程,所以它变得邪恶,而函数或方法始终是控制流程的更好方法。

我肯定错过了什么。Google为什么要包含它?


阅读 426

收藏
2020-07-02

共1个答案

小编典典

当我们实际检查Go标准库的源代码时,我们可以看到gotos在哪些地方得到了很好的应用。

例如,在math/gamma.go文件中,使用以下goto语句

  for x < 0 {
    if x > -1e-09 {
      goto small
    }
    z = z / x
    x = x + 1
  }
  for x < 2 {
    if x < 1e-09 {
      goto small
    }
    z = z / x
    x = x + 1
  }

  if x == 2 {
    return z
  }

  x = x - 2
  p = (((((x*_gamP[0]+_gamP[1])*x+_gamP[2])*x+_gamP[3])*x+_gamP[4])*x+_gamP[5])*x + _gamP[6]
  q = ((((((x*_gamQ[0]+_gamQ[1])*x+_gamQ[2])*x+_gamQ[3])*x+_gamQ[4])*x+_gamQ[5])*x+_gamQ[6])*x + _gamQ[7]
  return z * p / q

small:
  if x == 0 {
    return Inf(1)
  }
  return z / ((1 + Euler*x) * x)
}

goto从导入只是控制流使用的另一(布尔值)的变量,在端部检查在这种情况下我们节省。 在这种情况下
,该goto语句使代码实际上更易于阅读,并且更易于遵循(与上述针对goto您的论点完全相反)。

另请注意,该goto语句具有非常特定的用例。goto语言规范指出,它可能不会跳过进入范围(被声明)的变量,并且可能不会跳过其他(代码)块。

2020-07-02