如果条件在golang中具有多个变量

时间:2018-11-08 00:34:17

标签: go

由于我来自python背景,因此执行go代码对我来说非常令人困惑。有人可以解释一下吗?

if nferr, ok := err.(ops.NonFatalError); ok {
    w.NonFatalDiagnostics = w.NonFatalDiagnostics.Append(nferr.Diagnostics)
    return nil
}
  • 如何对nferr变量进行评估?
  • 打开花括号前的变量ok是什么?

  • 语句return nil,它是否从函数返回,代码是否在其中?

1 个答案:

答案 0 :(得分:1)

这在Go中称为“逗号可以”惯用语,与以下内容基本相同:

nferr, ok := err.(ops.NonFatalError)
if ok {
    w.NonFatalDiagnostics = w.NonFatalDiagnostics.Append(nferr.Diagnostics)
    return nil
}

唯一的区别是nferrok的范围在if块之内。

  

如何评估变量nferr,确定?

如果err的类型为ops.NonFatalError,则nferr将是ops.NonFatalError的具体类型,否则,ok将为false,而nferr将为ops.NonFatalError的零值。

  

打开花括号之前,变量可以使用什么?

看看上面的代码,基本上是一样的。

  

语句返回nil,它是否从函数返回,代码是否在其中?

是的

修改

从@ThunderCat的评论(我强烈建议您阅读)中,Go之旅解释了很多语法:

Type assertions

If with a short statement