/images/hugo/avatar.png

命令行管理工具 Cobra

我们在前面已经学习了 flag/pflag/viper 命令行、配置文件管理的使用,接下来就到了我们今天的主角 cobra 了:

  1. cobra 与 viper 没有直接关系,viper 提供的是一个收纳配置参数的容器,cobra 可以用 viper 来管理配置但不是必须。
  2. cobra 是 flag/pflag 的扩展,在它们的基础上 cobra 添加了子命令、参数检查等功能,并完全兼容 POSIX(可移植操作系统接口)

1. cobra 代码结构

/images/go/module/cobra.png

命令行参数 - flag/pflag

Cobra 是 Go 语言里面命令行参数的事实标准,基本上很多项目都在使用。Cobra 把命令行参数的实现分成了三个独立的 package:

  1. pflag: 对标准库中的 flag 的扩展
  2. viper: 配置管理
  3. cobra: pflag + viper

学习 Cobra 之前我们先来看看 flag/pflag

配置管理神 Viper

1. viper

1.1 viper 简介

Viper 是适用于Go应用程序的完整配置解决方案。可以处理所有类型的配置需求和格式。作为配置管理器,Viper 按照如下的从高到低的优先级加载配置:

Gin

go 网络库 net/http 的请求处理过程 中我们解析了 net/http 的请求处理流程。并说到所有基于 net/http 的 web 框架定制的其实就是 Server 中的下面几个部分:

  1. Handler: 实现更丰富的路由
  2. Context: 实现更丰富的请求控制逻辑(即: 中间件)
  3. Request/ResponseWriter: 在 net/http 已有的 RnseWriter 和 Request 基础上包装更易用的 Request 和 Response 对象。

我们就以 Gin 为示例,看看如何实现一个简单的 Web 框架。