16

たとえば、この回答では:

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

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

それは何とerr.(*exec.ExitError) 呼ばれていますか?それはどのように機能しますか?

4

2 に答える 2

18

型宣言です。仕様よりもうまく説明できません。

于 2012-05-02T14:03:53.110 に答える
6

型宣言です。そのステートメントは、 も であるifかどうかをチェックしています。それがあったかどうかを教えてください。最後には ですが、 に「変換」されます。これは型でのみ機能します。err*exec.ExitErrorokexiterrerr*exec.ExitErrorinterface

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)

ちなみに、これokは構文の一部ではありません。これは単なるブール値であり、好きな名前を付けることができます。

于 2016-02-22T07:04:11.060 に答える