错误必须写到 stderr,使用 fmt.Fprintln(os.Stderr, err) 或 log.New(os.Stderr, "", 0).Println(err);错误信息应简洁具体,如 "open config.yaml: permission denied",不加 ERROR 等前缀;通过 %w 保留原始错误链,支持 errors.Is/As 检查;在 main 中统一处理错误输出与退出码,避免中间函数调用 os.Exit。
Go CLI 程序输出错误,核心是:用 os.Stderr 输出、不带多余前缀、末尾不加换行(由调用者控制)、错误信息清晰具体、不掩盖原始错误链。
终端程序区分标准输出(stdout)和标准错误(stderr),前者用于正常结果,后者专用于错误和警告。用户可能重定向 stdout(如 mycmd > out.txt),但 stderr 仍会显示在终端,确保错误不被丢弃。
正确做法:
fmt.Fprintln(os.Stderr, "error: ...")
log.New(os.Stderr, "", 0).Println("error: ...")(避免全局 log.SetOutput 影响其他部分)fmt.Println("error: ...")(默认写到 stdout)不要自动加 ERROR:、[ERR] 或时间戳——CLI 用户习惯阅读原生、紧凑的错误描述。前缀应由上层统一处理(比如主函数统一包装),或完全交由调用方决定。
好例子:
open config.yaml: permission denied(直接复用 err.Error())invalid port number "abc": strconv.ParseInt: parsing "abc": invalid syntax坏例子:
ERROR: open config.yaml: permission denied(前缀多余)[2025-05-12 10:30:00] FATAL: ...(时间戳+级别对 CLI 不必要)%w 和 errors.Join
不要用 fmt.Sprintf("failed to read %s: %v", file, err) 吞掉原始 error。要支持错误检查(errors.Is / errors.As)和展开(errors.Unwrap)。
推荐写法:
return fmt.Errorf("read config file %q: %w", path, err)errors.Join(err1, err2)(Go 1.20+)errors.Unwrap 或 errors.Format(需自定义)展示全链,但多数 CLI 直接输出最外层 err.Error() 即可,够用且干净
数结尾统一处理错误退出在 main() 函数中,用一个 if err != nil 块集中处理所有错误输出和退出码,保持逻辑清晰。
典型结构:
func main() {
if err := run(); err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
}
注意:
os.Exit 或 log.Fatal——这会让测试变困难、无法拦截错误interface{ ExitCode() int },然后在 main 中判断基本上就这些。不复杂但容易忽略——关键是把 stderr 当“错误专用通道”,把 error 当“可传递、可检查的数据”,而不是字符串日志。
# go
# golang
# ai
# if
# format
# Error
# 字符串
# 命令行参数
# int
# Interface
# nil
# number
# 写到
# 不加
# 错误信息
# 自定义
# 而不是
# 中统
# 多个
# 不被
# 不带
# 这会
相关文章:
黑客如何通过漏洞一步步攻陷网站服务器?
如何自定义建站之星网站的导航菜单样式?
C++如何将C风格字符串(char*)转换为std::string?(代码示例)
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
如何在服务器上三步完成建站并提升流量?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
详解jQuery中基本的动画方法
香港服务器如何优化才能显著提升网站加载速度?
如何在腾讯云免费申请建站?
如何彻底删除建站之星生成的Banner?
定制建站模板如何实现SEO优化与智能系统配置?18字教程
重庆网站制作公司哪家好,重庆中考招生办官方网站?
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
建站主机选哪家性价比最高?
开源网站制作软件,开源网站什么意思?
如何续费美橙建站之星域名及服务?
代购小票制作网站有哪些,购物小票的简要说明?
如何通过智能用户系统一键生成高效建站方案?
如何用已有域名快速搭建网站?
如何在局域网内绑定自建网站域名?
制作旅游网站html,怎样注册旅游网站?
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
网站制作难吗安全吗,做一个网站需要多久时间?
c# 服务器GC和工作站GC的区别和设置
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
如何快速完成中国万网建站详细流程?
网站制作服务平台,有什么网站可以发布本地服务信息?
建站之星安装后如何配置SEO及设计样式?
如何在建站之星网店版论坛获取技术支持?
学校免费自助建站系统:智能生成+拖拽设计+多端适配
如何安全更换建站之星模板并保留数据?
清除minerd进程的简单方法
学校建站服务器如何选型才能满足性能需求?
小型网站建站如何选择虚拟主机?
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
制作宣传网站的软件,小红书可以宣传网站吗?
文字头像制作网站推荐软件,醒图能自动配文字吗?
建站之星官网登录失败?如何快速解决?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
太原网站制作公司有哪些,网约车营运证查询官网?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
英语简历制作免费网站推荐,如何将简历翻译成英文?
如何选择CMS系统实现快速建站与SEO优化?
css网站制作参考文献有哪些,易聊怎么注册?
如何在IIS中新建站点并解决端口绑定冲突?
建站之星如何实现PC+手机+微信网站五合一建站?
如何高效利用200m空间完成建站?
建站之星备案流程有哪些注意事项?
常州自助建站费用包含哪些项目?
公司门户网站制作流程,华为官网怎么做?
*请认真填写需求信息,我们会在24小时内与您取得联系。