import "context"
然后你可以使用它的函数,如context.Background、context.WithCancel、context.WithTimeout等来创建和管理Context 。Context是一个携带取消信号和deadline的对象,可以跨越API边界 。比如说:ctx := context.Background() // 创建一个空的背景上下文(从不取消) 。ctx, cancel := context.WithCancel(ctx) // 创建一个新的上下文,可以通过调用cancel函数来取消 。defer cancel() // 在函数结束前执行ctx的取消动作// 将ctx传递给一些接受它作为参数的函数......select {case <-ctx.Done(): // 等待来自ctx的取消信号fmt.Println("Canceled by parent") return ctx.Err() // 从ctx返回一个错误值 default: // 如果没有收到取消信号就执行fmt.Println("成功完成") return nil // 不返回错误值 }
4. CLI程序的退出状态代码惯例退出状态代码是一个整数,表示CLI程序是否成功执行完成 。CLI程序通过调用os.Exit或从main返回的方式返回退出状态值 。其他CLI程序或脚本可以可以检查这些退出状态码,并根据状态码值的不同执行不同的处理操作 。
业界有一些关于退出状态代码的约定和扩展,这些约定被许多CLI程序广泛采用 。其中一些主要的约定和扩展如下: 。
- 退出状态代码为0表示程序执行成功(例如:os.Exit(0) )
- 非零的退出状态代码表示失败(例如:os.Exit(1) ) 。
- 不同的非零退出状态代码可能表示不同的失败类型或原因(例如:os.Exit(2)表示使用错误,os.Exit(3)表示权限错误等等) 。
- 大于125的退出状态代码可能表示被外部信号终止(例如,os.Exit(130)为被信号中断) 。
五. 编写文档编写优秀CLI程序的另一个重要环节是编写清晰简洁的文档,解释你的程序做什么以及如何使用它 。文档可以采取各种形式,如README文件、usage信息、help flag等 。在本节中,我们将告诉你如何为你的程序写一个README文件,如何为你的程序写一个有用的usage和help flag等 。
1. 为你的CLI程序写一个清晰简洁的README文件README文件是一个文本文件,它提供了关于你的程序的基本信息,如它的名称、描述、用法、安装、依赖性、许可证和联系细节等 。它通常是用户或开发者在源代码库或软件包管理器上首次使用你的程序时会看到的内容 。
如果你要为Go CLI程序编写一个优秀的README文件,你应该遵循一些最佳实践,比如:
- 使用一个描述性的、醒目的标题,反映你的程序的目的和功能 。
- 提供一个简短的介绍,解释你的程序是做什么的,为什么它是有用的或独特的 。
- 包括一个usage部分,说明如何用不同的标志、参数、子命令和选项来调用你的程序 。你可以使用代码块或屏幕截图来说明这些例子 。
- 包括一个安装(install)部分,解释如何在不同的平台上下载和安装你的程序 。你可以使用go install、go get、goreleaser[24]或其他工具来简化这一过程 。
- 指定你的程序的发行许可,并提供一个许可全文的链接 。你可以使用SPDX标识符[25]来表示许可证类型 。
- 为想要报告问题、请求新功能、贡献代码或提问的用户或开发者提供联系信息 。你可以使用github issue、pr、discussion、电子邮件或其他渠道来达到这个目的 。
2. 为你的CLI程序编写有用的usage和help标志usage信息是一段简短的文字,总结了如何使用你的程序及其可用的标志、参数、子命令和选项 。它通常在你的程序在没有参数或输入无效的情况下运行时显示 。
help标志是一个特殊的标志(通常是-h或--help),它可以触发显示使用信息和一些关于你的程序的额外信息 。
为了给你的Go CLI程序写有用的usage信息和help标志,你应该遵循一些准则,比如说:
- 使用一致而简洁的语法来描述标志、参数、子命令和选项 。你可以用方括号“[ ]”表示可选元素,使用角括号“< >”表示必需元素,使用省略号“...”表示重复元素,使用管道“|”表示备选,使用中划线“-”表示标志(flag),使用等号“=”表示标志的值等等 。
推荐阅读
- 可以让你零代码快速开发REST API的几个开源项目
- HTTP缓存如何提高Web应用程序的性能?
- 搭建私有云平台,无需开发,一键部署,让你省事又省心。懂视生活
- APP开发用什么语言好?Java和PHP的区别在哪?
- GPT-4解放程序员!GitHub推出Copilot X,动动嘴就能写代码
- iOS使用FFmpeg命令行
- 从零开发一套基于React的加载动画库
- 短视频开发,如何正确的使用前后端分离?
- 2023年优秀编程语言趋势
- 程序员|作为一个程序员为什么今年的工作感觉更难找了呢