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. 使用英文输出
输出提示要使用英文,虽然中文是我们的母语作为提示会更易懂,但是要考虑到很多生产服务器上并没有设置中文支持,有时会**输出乱码**。
所以尽量使用英文提示以适应更多场景。
- 序言
- 基础
- 安装GoHub
- 目录结构
- 开发规范
- 部署项目
- 架构
- 架构总览
- 生命周期
- 配置
- 配置介绍
- 配置目录
- 配置格式
- 配置加载
- 读取配置
- 动态配置
- 环境变量配置
- 路由
- 路由模式
- 路由定义
- 路由参数
- 路由分组
- 路由限流
- 路由拆分
- 控制器
- 控制定义
- 控制器初始化
- 中间件
- Make创建控制器
- 请求
- 请求信息
- 数据库
- 连接数据库
- 基本使用
- Make创建模型
- 日志
- 介绍
- 日志驱动
- 日志写入
- HTTP日志
- 数据库请求日志
- 错误和调试
- Debuger调试器
- 验证
- 验证器
- 验证规则
- Make创建验证器
- 杂项
- 缓存
- 分页
- 验证码
- CURL请求
- 命令行
- 基础知识
- console 包
- Cobra 基础
- 命令行模式
- 附录
- 配置参考
- 第三方依赖库