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

时间:2012-05-02 13:56:20

标签: syntax go

例如,在这个答案中:

https://stackoverflow.com/a/10385867/20654

...
if exiterr, ok := err.(*exec.ExitError); ok {
...

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

2 个答案:

答案 0 :(得分:12)

这是类型断言。我无法解释它比the spec更好。

答案 1 :(得分:2)

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

如果你对基础类型有100000%的肯定,你也可以省略ok。但是,如果你省略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)

顺便说一句,ok不是语法的一部分。它只是一个布尔值,你可以随心所欲地命名它。