Go代码中的这个"错误.(*exec.ExitError)"是什么?

Osc*_*Ryz 10 syntax go

例如,在这个答案中:

/sf/answers/727010721/

...
if exiterr, ok := err.(*exec.ExitError); ok {
...
Run Code Online (Sandbox Code Playgroud)

这叫什么err.(*exec.ExitError) ?它是如何工作的?

Mos*_*afa 12

这是类型断言.我无法解释它比规范更好.

  • 好吧,只有"相似".转换在Go中称为[转换](http://golang.org/ref/spec#Conversions).可以说转换发生在编译时,并在运行时断言. (2认同)

425*_*esp 8

这是一个类型断言。该if语句正在检查是否err也是一个*exec.ExitError. 让ok您知道它是否是。最后exiterrerr,但“转换”为*exec.ExitError。这仅适用于interface类型。

ok如果您对基础类型有 100000% 的把握,也可以省略。但是,如果你省略了ok并且结果证明你错了,那么你会得到一个panic.

// find out at runtime if this is true by checking second value
exitErr, isExitError := err.(*exec.ExitError)

// will panic if err is not *exec.ExitError
exitErr := err.(*exec.ExitError)
Run Code Online (Sandbox Code Playgroud)

顺便说一下,这ok不是语法的一部分。它只是一个布尔值,您可以将其命名为任何您想要的名称。