例如,在这个答案中:
...
if exiterr, ok := err.(*exec.ExitError); ok {
...
Run Code Online (Sandbox Code Playgroud)
这叫什么err.(*exec.ExitError)
?它是如何工作的?
这是一个类型断言。该if
语句正在检查是否err
也是一个*exec.ExitError
. 让ok
您知道它是否是。最后exiterr
是err
,但“转换”为*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
不是语法的一部分。它只是一个布尔值,您可以将其命名为任何您想要的名称。
归档时间: |
|
查看次数: |
719 次 |
最近记录: |