Go code中有什么“foo。(bar.Baz)”的东西?

例如,在这个答案中:

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

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

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

这是types断言。 我不能解释它比规范更好。

这是一个types的断言。 if语句正在检查err是否也是*exec.ExitErrorok让你知道是否是。 最后, exiterrerr ,但“转换”为*exec.ExitError 。 这只适用于interfacetypes。

如果100%确定底层types,也可以省略ok 。 但是,如果你忽略了,结果certificate你错了,那么你会感到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不是语法的一部分。 这只是一个布尔值,你可以任意命名。

    Interesting Posts