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.ExitError 。 ok让你知道是否是。 最后, exiterr是err ,但“转换”为*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不是语法的一部分。 这只是一个布尔值,你可以任意命名。