Как Go может набрать ExitError в пакете os / exec для поддержки метода Sys (), если его нет в документации?

go error-handling

231 просмотра

1 ответ

20 Репутация автора

Основываясь на различных примерах в Интернете и в ответе на этот вопрос SO, я пытаюсь выяснить, как возможно, чтобы тип ExitError из пакета os / exec поддерживал метод Sys (), даже если в документах упоминается только ошибка ( ) метод для этого типа.

Я догадался, что рассматриваемый метод Sys () относится к типу ProcessState в пакете os , но как ExitError может использовать его напрямую ( exiterror.Sys()) без необходимости использования full ( exiterror.ProcessState.Sys())?

Это, должно быть, основной вопрос Go, но мне еще предстоит выяснить ответ на этот вопрос ...

Автор: Martin Gignac Источник Размещён: 18.07.2016 04:38

Ответы (1)


2 плюса

5553 Репутация автора

Решение

cmd.Wait()уже возвращает ошибку типа *ExitError. Если вы посмотрите на ExitErrorопределение, вы увидите, что оно встраивает *os.ProcessState:

type ExitError struct {
        *os.ProcessState
        // other fields
}

Именно через *os.ProcessStateэто значение типа ExitErrorможет вызывать Sys()метод.

Обратите внимание, что в определении ExitErrorнет никакого имени поля, связанного с *os.ProcessState, что означает, что значение типа ExitErrorможет напрямую вызывать любой метод *os.ProcessState(вроде как наследование, где ExitErrorнаследуется *os.ProcessState. Но это только для того, чтобы дать вам очень простую идею. Читать документы для уточнения.) пока не определен метод ExitErrorс таким же именем.

Конечно, это еще не все. Вы можете прочитать об этом здесь .

Автор: abhink Размещён: 18.07.2016 04:51
Вопросы из категории :
32x32