/images/hugo/avatar.png

Go Work Pool

我们在 Go 第四部分 Go 并发系列的 sync.Poolchannel 提到了很多用于 Go 协程池的第三方库,今天我们就来详细介绍它们的使用和实现。

1. worker 池

我们的第一个示例来自Marcio Castilho 在 使用 Go 每分钟处理百万请求 这篇文章中,就介绍了他们应对大并发请求的设计。这不是一个库,但是 worker pool 的实现很具有代表性:

go 对象池化

我们在 Go 第四部分 Go 并发系列的 sync.Pool 提到了很多用于对象池化的第三方库,今天我们就来详细看看其中提到的对象池化库的使用和实现。

1. buffer 池化

2. TCP 连接池

3. 数据库连接池

4. Memcached Client 连接池

命令行管理工具 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 按照如下的从高到低的优先级加载配置: