🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
Gohub 项目主要提供的是 Web 服务。且具备命令行功能。我们会将 Web 服务功能封装到子命令 serve 里。 除了 serve 命令,我们还会有以下命令: 1. key 命令生成 app key 2. make 命令 3. seed 数据填充 4. migrate 数据库迁移 5. cache 缓存处理 命令的层级是三层结构,超过三层我们会使用标示 (flag) 来实现。 三层结构里, 树状结构的最顶层是 APPNAME ,在我们这个项目中是 gohub,用来组织子命令用的。上面罗列的是第二层和第三层命令。 ## 命令基础 ### 1. 命令的组成 命令的四个基本组成部分: * 主命令(APPNAME):命令最顶层; * 命令(Command):就是需要执行的操作; * 参数(Arg):参数即要操作的对象; * 选项(Flag):用以调整命令的行为。 拼在一起: ~~~ $ APPNAME COMMAND ARG --FLAG(-f) ~~~ 下面示例中,`server`是一个(子)命令,`--port`是选项: ~~~ $ hugo server --port=1313 ~~~ 下面示例中,`clone`是一个(子)命令,`URL`是参数,`--bare`是选项: ~~~ $ git clone URL --bare ~~~ ### 2. 子命令 一个命令可以有多个子命令,如下面: ~~~ $ gohub migrate rollback $ gohub make factory ~~~ migrate 和 make 都有各自的子命令。 ### 3. 长选项和短选项 定义选项时,我们可以为其定义简写版本,一般称为短选项。 短选项是长选项的简写,使用`-`,而长选项是`--`。如: ~~~php $ gohub serve --port=1313 ~~~ 等同于: ~~~php $ gohub serve -p=1313 ~~~ ### 4. 底层包的实现机制 使用命令行工具包时,要知道他们其实都是在围绕`os.Args`参数在做功能。万变不离其宗,不要被工具限制住,当有特殊需求工具无法满足时候,可以在 os.Args 上做文章。 ### 5. 终端输出 命令行出错时,除了日志记录外,还需要有提示反馈给用户。 虽然本地开发时,日志会打印到终端,但是**线上环境日志只记录到文件**,所以我们所有命令出错时,都应该使用命令行输出提示给用户。 ### 6. 使用英文输出 输出提示要使用英文,虽然中文是我们的母语作为提示会更易懂,但是要考虑到很多生产服务器上并没有设置中文支持,有时会**输出乱码**。 所以尽量使用英文提示以适应更多场景。