コマンドを呼び出してWait した時に返されるerrには ExitError とそれ以外というのがあって、ExitError は コマンドの異常終了、それ以外はほぼIOエラーということが公式ドキュメントに記載されている。
異常終了だったのかそうでないのかを判定する方法は以下のような感じになる。
err := cmd.Wait()
if exitError, ok := err.(*exec.ExitError); ok {
// 異常終了
log.Fatal(exitError)
}
if err != nil {
// たぶんIOエラー
log.Fatal(err)
}
err が exec.ExitError型かどうかを判定するのに型アサーションで判定するというテクニックが使われている。golang では一般的なのだろう。今後も使っていきたい。