Статус выхода 1
и 0
- это не статус выхода вашего приложения, а go run
.
Если вы запустите свое приложение, используя go run
, то go run
вернет 0
, если ваше приложение вернет 0
статус выхода, и 1
, если ваше приложение вернет ненулевой статус (или go run
само по себе не получается).
Создайте свое приложение, используя go build
или go install
, затем запустите приложение напрямую. Тогда вы увидите 2
статус выхода.
Цитирование из Команда go: Скомпилировать и запустить программу Go:
Состояние выхода Run не является состоянием выхода скомпилированного двоичного файла.
Примечание. Если приложение запускается на Go игровой площадке , это также указывает на состояние выхода приложения (без вывода):
Program exited: status 2.
Этот «вопрос» уже поднимался, см. # 13440 . Расс Расс Кокс слова:
Реальный вопрос в том, должен ли 'go run x.go' быть просто интерпретатором для программ Go, например, "python x.py", или это инструмент, который запускает подпроцесс и сообщает о результатах сам, например делать. На сегодняшний день ответом стал последний. Так что не очевидно, что поведение неправильное, если только «go run» не является какой-то интерактивной командой go, а мы уже говорили, что это не так.
И слова Дмитрия Шуралева:
Код выхода - это одномерное значение. При выполнении go run запускаются 2 процесса и 2 кода выхода, которые может потребоваться узнать.
Однако go run может сообщить только одно значение кода выхода, а не два. Невозможно без потерь объединить два кода выхода в один. Если бы он сообщал код выхода программы, в которой он выполнялся дословно, то информация о коде выхода из go run была бы затенена и фактически потерялась.
IMO, если кто-то заботится о точном коде завершения программы, которую он выполняет, он должен собрать его и выполнить самостоятельно. go run - это удобная функция, когда ваши потребности не так требовательны, и у вас все меньше информации, потому что она не может передать больше информации, чем уже делает.