不请自来,这里列出了我在工作中最常用的Go库,可以看我这篇文章:

单元测试

作为一名合格的软件工程师,每天最离不开的就是写单元测试了,单元测试可能是每个开发者又爱又恨的必备任务。在鹅厂的适合我们最常用的开源单元测试框架主要有两种:

testify:带有常见断言和模拟的工具包,可以与标准库很好地配合;



gomock:Go编程语言的Mock框架,常用于接口测试;



HTTP篇

虽然很多大厂都有自己专属的Web框架,比如字节跳动的 Hertz ;但是Go语言本身提供的标准库 net/http 非常强大,在我们以前的部门经常会搭配一些路由组件、Session组件直接写Web服务:

mux:一个强大的HTTP路由器和URL匹配器,用于构建Go web服务器;



session:提供cookie和文件系统会话以及自定义会话后端的基础设施。



也有些小部门喜欢用轻量级别的Web框架Gin:

Gin是一个用Go 编写的HTTP web框架。它提供了一个类似Martini的API,具有更好的性能;



Gin同时提供了很多的中间件:



数据库篇

对于关系型数据库而言,不同团队的要求不太一样,有些团队比较喜欢使用ORM,而有些团队对SQL性能比较敏感;

对于喜欢裸写SQL语句的团队比较喜欢使用sqlx:基于标准库 database/sql 的扩展;



而对于喜欢用ORM的团队通常会使用gorm



Gorm的文档:GORM Guides

缓存篇

我们的部门通常会使用 go-redis 来支持Go语言与redis服务端的交互,go-redis 是Google官方推出的支持哨兵集群、cluster集群的redis客户端;



微服务篇

由于各个大厂都有自己的微服务框架,例如字节跳动的KiteX、好未来的go-zero、腾讯内部的RPC框架更是多如牛毛,但有些团队也很喜欢使用Google的 grpc-go



grpc-go 的流行还得因为配套的生态环境,grpc-ecosystem 为grpc提供了监控、恢复、链路追踪、限流等常用中间件;



其他常用篇

elstic:Go语言的Elasticsearch客户端;



mongo-go-driver:MongoDB的Go语言驱动程序;



viper:Go语言用于管理配置的工具;



而对于中台部门,通常会使用命令行工具,丸子以前也是鹅厂的一个中台部门,我们就很喜欢使用 cobra:Go语言命令行交互工具;



最后推广一下我的开源库!

TinyRPC

TinyRPC 是基于Go语言标准库 net/rpc 扩展的远程过程调用框架,它具有以下特性:

  • 基于TCP传输层协议
  • 支持多种压缩格式:gzip、snappy、zlib;
  • 基于二进制的 Protocol Buffer 序列化协议:具有协议编码小及高扩展性和跨平台性;
  • 支持生成工具:TinyRPC提供的 protoc-gen-tinyrpc 插件可以帮助开发者快速定义自己的服务;

TinyRPC 的源代码仅有一千行左右,通过学习 TinyRPC ,开发者可以得到以下收获:

  • 代码简洁规范
  • 涵盖大多数 Go 语言基础用法和高级特性
  • 单元测试编写技巧
  • TCP流中处理数据包的技巧
  • RPC框架的设计理念



TinyBalancer

目前还在开发过程中,大家可以慢慢等待