由于我来自python背景,因此执行go代码对我来说非常令人困惑。有人可以解释一下吗?
if nferr, ok := err.(ops.NonFatalError); ok {
w.NonFatalDiagnostics = w.NonFatalDiagnostics.Append(nferr.Diagnostics)
return nil
}
打开花括号前的变量ok
是什么?
语句return nil
,它是否从函数返回,代码是否在其中?
答案 0 :(得分:1)
这在Go中称为“逗号可以”惯用语,与以下内容基本相同:
nferr, ok := err.(ops.NonFatalError)
if ok {
w.NonFatalDiagnostics = w.NonFatalDiagnostics.Append(nferr.Diagnostics)
return nil
}
唯一的区别是nferr
和ok
的范围在if
块之内。
如何评估变量nferr,确定?
如果err
的类型为ops.NonFatalError
,则nferr
将是ops.NonFatalError
的具体类型,否则,ok
将为false,而nferr
将为ops.NonFatalError
的零值。
打开花括号之前,变量可以使用什么?
看看上面的代码,基本上是一样的。
语句返回nil,它是否从函数返回,代码是否在其中?
是的
修改
从@ThunderCat的评论(我强烈建议您阅读)中,Go之旅解释了很多语法: