#exit #codes #error #status-code #system #semantic #user

semantic-exit

受 HTTP 状态码启发的语义退出码

1 个稳定版本

1.0.0 2023 年 1 月 10 日

#17#status-code

Apache-2.0 许可协议

16KB
170

语义退出码

用法

Go

os.Exit(exit.Forbidden) // The user isn't permitted to perform this action
os.Exit(exit.Unavailable) // An API this program consumes isn't available

Rust

use semantic_exit::{exit, Code};

exit(Code::Forbidden);
exit(Code::Unavailable);

查看 退出码完整列表

关于

传统上,程序以 0 退出表示成功,而非零表示失败。

os.Exit(0) // success
os.Exit(1) // failure

但系统调用 exit 接受 0 到 255 之间的值,留下 254 种表达失败的方式。

本库的目标是定义以下退出码:

  1. 适用于异构命令行工具的广泛适用性
  2. 易于划分为用户错误和系统错误

它定义了两个 非保留 范围的代码:80-99 用于用户错误,100-119 用于软件或系统错误。

代码

退出码 名称 含义
0 OK 程序成功退出。
1 NotOK 程序未成功退出,但未提供额外的上下文说明失败原因。
80 UsageError 程序未成功退出,因为使用不当。 (例如,省略了必需的参数或为标志提供了无效的值。)
81 UnknownSubcommand 程序未成功退出,因为调用了不可识别的子命令。 (由 CLI 多工具使用。)
82 RequirementNotMet 程序未成功退出,因为没有满足其先决条件。
83 Forbidden 程序未成功退出,因为用户没有权限执行所请求的操作。
84 MovedPermanently 程序未成功退出,因为它已迁移到新位置。
100 InternalError 程序未成功退出,因为它自己的代码中存在问题。 (当问题已知是与程序代码或依赖项有关时,用作 1 的替代品。)
101 Unavailable 程序未成功退出,因为它所依赖的服务不可用。 (例如,本地守护进程或远程服务未响应,连接意外关闭,HTTP 服务返回 503。)

保留代码和先例

依赖关系

~0.4–1MB
~20K SLoC