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
。 这只适用于interface
types。
如果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
不是语法的一部分。 这只是一个布尔值,你可以任意命名。