退出带有错误代码的程序的惯用方法是什么?

Exit的文档中说:"程序立即终止;延迟函数不运行.",log.Fatal就叫Exit.对于那些不是令人发指的错误,在不运行延迟函数的情况下终止程序似乎是极端的.

我是否应该传递一些指示出现错误的状态,然后在我知道可以安全退出的某个点调用Exit(1),并且所有延迟函数都已运行?

推荐答案

我在我真正的main个方案中的大多数都是按照这些思路做的,以便return err公约尽快获得通过,并有一个适当的终止:

func main() {
    if err := run(); err != nil {
        fmt.Fprintf(os.Stderr, "error: %v\n", err)
        os.Exit(1)
    }
}

func run() error {
    err := something()
    if err != nil {
        return err
    }
    // etc
}

Go相关问答推荐

从带有嵌套括号的字符串中提取值

如何将Golang测试用例的测试覆盖率值与特定阈值进行比较

Golang和Gin web框架在router.Run()之后执行代码

我无法使用反向代理更改主机标头

Exchange Web 服务 - 使用 soap xml 请求查找所有未读邮件

加密/椭圆:try 在无效点上进行操作

GoLang: gocui 边框 colored颜色

如何使用 go 包设置标头键和值:shurcooL/graphql 或 hasura/go-graphql-client?

helm :将 YAML 转换为 JSON 时出错:yaml:第 xx 行:未找到预期的密钥

泛型:实现嵌套接口

从Go中的随机日期开始以天为单位获取时间

转换朴素递归硬币问题时的记忆错误

NaN 是 golang 中的可比类型吗?

Golang泛型在用作 map 元素时不起作用

如何优雅地映射到 Go 中返回可变长度数组的方法?

Golang:每个键具有多个值的映射

从 Go struct 中提取标签作为 reflect.Value

将基本 HTTP AUth 用户/密码凭据存储在 GO 中,无需外部包

golangci-lint 的 GitHub 操作失败,无法加载 fmt

Golang LinkedList 删除第一个元素