恭喜你,至此,你已经学习完了本课程最核心的内容。这些内容足以让你上手开发一个真正企业级的应用。这是一个好的开始,并不是结束。未来的你,还需要继续精进自己的 Go 研发能力。

在继续学习的路上,如果你能对 Go 的生态圈有所了解,那么就解决了:“有哪些内容”、“学习什么”这 2 个问题。了解 Go 的生态圈,有助于你今后的 Go 开发能力的再学习和精进。

本节课就来介绍下 Go 语言的生态。

提示:本课程内容会不定期更新。

Go 语言生态中有什么?

生态这个词,在不同领域有不同的解释。Go 语言生态内容很多,一般可以分为以下几类:

  • 技术栈:围绕 Go 语言构建一系列技术栈,例如:云原生技术栈,微服务技术栈等。每种技术栈,可以具有不同的开源项目实现。

  • 框架:围绕 Go 实现的一系列框架,这些框架可以支持构建某类功能。

  • 开源项目:使用 Go 语言实现的各类开源项目,这些开源项目实现不同的功能。例如:提供一个完成某种功能的 Go 包、提供一个具有完整功能的业务平台等。

Go 语言生态中的所有内容都跟 Go 语言相关,甚至绝大部分都是由 Go 语言来构建的。同时,Go 语言的生态,也会促进 Go 语言的发展和普及。Go 相较于 Java,最大的劣势就是 Go 的生态没有 Java 的丰富,导致开发 Go 项目时,缺少一些拿来即用的现有实现。

Go 生态当前正处在迅猛发展的阶段,并且日渐完善。随着 Go 生态的完善,Go 语言必定会变得越来越受欢迎。

学习 Go 生态,其实很多时候就是指学习生态中优秀的开源项目。这些开源项目不仅可以让你学习到优秀的 Go 开发技术,还能够让你拿来即用,以提高开发效率。

想要学习 Go 生态,就首先需要知道 Go 生态中有什么,哪些项目值得你学习。有了这些 “物料” 储备,你今后才能够想起并使用这些 “物料”。

去哪里可以了解 Go 语言生态?

那么,我们去哪里了解 Go 语言生态呢?有很多途径,这里列举一些我知道的途径供你参考:

  • 日常学习积累:通过日常的学习积累。比如,我们看了一篇介绍 Go 优秀日志包的 logrus 实战文章,我们知道了 Go 生态中有一个非常优秀的日志包实现 logrus。这种方式贵在积累,通过日常的积累,慢慢完善脑海中的 Go 生态图谱。

  • 一些专门介绍 Go 生态的文章,例如:

    • 系列:这些文章精选了一些使用 Go 实现的优秀的包、框架、软件。例如:awesome-go(中文版:awesome-go-cn)、golang-open-source-projects 等。
    • awesome-go:精选了一些使用 Go 实现的优秀的包、框架、软件;
    • 网上整理的文章:这些文章会列出一些 Go 生态中的优秀实现,例如:Go 语言生态发展之路。这类文章内容参差不齐,需要你进行筛选学习。
  • libs.garden:这个网站会按类别聚合相关的 Go 开源项目,你可以根据 GrowingPopular 等维度去排序查看这些开源项目;

  • GitHub Go Topic:GitHub 的 Go topic,在这个 Topic 中,你能够根据 Star 数、Fork 数、更新时间,去排序查看 Go 项目。

当然,还有很多其他途径去了解 Go 生态,如果你有不错的途径,欢迎评论区分享。

通过上面的途径,你可以了解很多 Go 生态中的技术栈、框架和开源项目。一般来说,这些文章会尽量列出一些优秀的实现,但是里面也有很多实现并不是优秀的。人的精力有限,你不可能将同类的功能实现都调研、学习一番,也没这个必要,这时候就需要你通过自己的了解,去筛选出优秀的实现,并加以学习和使用。

Go 语言生态中优秀的开源项目推荐

Go 语言有很多开源项目,仅仅 GitHub 就有 4 万多个大大小小的开源项目,其中不乏优秀的开源项目。这里我罗列一些我在做课程开发、项目开发中经常参考/使用的开源项目:

  1. Go 项目开发中最常用的优秀 Go 包;

  2. 优秀的完整 Go 项目:如果你想学习 Go 项目开发或者想参考某些功能的实现方式,这些项目可以会给你一些参考;

  3. 其他常用的优秀 Go 包。

更多 Go 生态中优秀的开源项目,需要你去发现。

Go 项目开发中最常用的优秀 Go 包

这里,罗列一些 Go 项目开发中常用的软件包:

开源项目地址 项目功能描述
github.com/AlekSi/poin… pointer 提供了函数来获取指向内置类型值的指针
github.com/asaskevich/… Go 字段校验包
github.com/caarlos0/en… 将环境变量解析为结构体
github.com/fatih/color Go 颜色包
github.com/ghodss/yaml YAML 编解码包
github.com/go-redsync/… Redis 分布式互斥锁
github.com/go-resty/re… Go 语言实现的简单 HTTP 和 REST 客户端库
github.com/golang-jwt/… 一个优秀的 JWT 处理包
github.com/google/wire Go 的编译时依赖注入
github.com/jinzhu/copi… Go 实现的复制器,将值从结构复制到结构等
github.com/olekukonko/… Go 表格支持
github.com/patrickmn/g… 基于内存的 key-value 缓存包
github.com/robfig/cron… Go cron 包
github.com/uber-go/zap 高性能、功能强大的日志包
github.com/spf13/cobra 功能强大的现代命令行包
github.com/spf13/pflag 非常优秀的 Go flag 包
github.com/spf13/viper Go 程序配置文件处理包
github.com/stretchr/te… Go 测试框架
google.golang.org/grpc Go RPC 实现
google.golang.org/protobuf 提供 Protocol Buffers 的 Go 语言支持
gorm.io/gorm 当前,最好用的 Go ORM 包
github.com/hashicorp/g… Go LRU Cache 包
github.com/deckarep/go… Go Set 包
github.com/google/uuid UUID 生成包
github.com/sony/sonyfl… 分布式 ID 生成包
github.com/jasonsoft/g… 用来生成短 ID
github.com/spf13/cast 一种类型安全轻松地转换为另一种类型
github.com/grpc-ecosys… 遵循 gRPC HTTP 规范的 gRPC 到 JSON 代理生成器
github.com/casbin/casb… 强大的支持如 ACL, RBAC, ABAC 等访问模型的授权包
github.com/gin-gonic/g… 最受欢迎的 Go Web 框架
github.com/prometheus/… Prometheus SDK
go.etcd.io/etcd/client… Etcd SDK
github.com/segmentio/k… Kafka SDK
github.com/hashicorp/c… Consul SDK
github.com/vinllen/mgo MongoDB SDK
github.com/go-redis/re… Redis SDK
github.com/panjf2000/a… nts 是一个高性能且低损耗的 goroutine 池。
github.com/qax-os/exce… 一个读写 Excel 的库,基本上你能遇到的 Excel 操作它都能实现
github.com/nyaruka/pho… 手机号码验证库,可以不用自己写正则表达式了

优秀、完整的 Go 项目

这里,再罗列一些优秀的、具有参考意义的 Go 开源项目。通过对这些项目的学习,可以提高你的 Go 项目开发能力。

开源项目地址 项目功能描述
github.com/marmotedu/i… 企业级的 Go 语言实战项目:认证和授权系统(带配套课程)
github.com/marmotedu/m… 从设计、开发、测试到部署,带你从零实现高质量的 Go 应用(带配套课程)
github.com/go-kratos/b… 在线商店应用程序,Kratos 的完整微服务演示
github.com/casbin/casb… Casbin 即服务 (CaaS)
github.com/LyricTian/g… 基于 Gin + Gorm 2.0 + Casbin + Wire DI 的 RBAC 脚手架
github.com/flipped-aur… 基于 Vite+ Vue3 + Gin 搭建的开发基础平台,集成 jwt 鉴权、权限管理、动态路由、显隐可控组件、分页封装、多点登录拦截、资源权限、上传下载、代码生成器、表单生成器等开发必备功能。
github.com/piupuer/gin… 由 Gin + Gorm + JWT + Casbin 组合实现的 RBAC 权限管理脚手架,搭建完成即可快速、高效投入业务开发
github.com/nilorg/naas 基于 OAuth2 + Casbin + Swagger + Gin 开发的认证授权服务器
github.com/caicloud/ni… Go REST API 应用框架
github.com/go-admin-te… 基于 Gin + Vue + Element UI 的前后端分离权限管理系统脚手架(包含了:多租户的支持,基础用户管理功能,jwt鉴权、代码生成器、RBAC 资源控制、表单构建、定时任务等)3 分钟构建自己的中后台项目
github.com/gzltommy/tk… Kratos 微服务项目示例模板,可用于生产环境

Go 明星开源项目

在 Go 的生态中,有很多明星项目,这些明星项目在各自领域中要么是一个事实的标准,例如:Kubernetes、Etcd、Docker 等;要么非常受欢迎,例如:

开源项目地址 项目功能描述
Docker 家喻户晓的容器技术
Kubernetes 容器编排引擎,Google出品
Knative 基于 Kubernetes 与 Istio 的 Serverless 架构方案
Influxdb 时序数据库
Grafana 数据监控可视化看板
Prometheus 开源监控系统
Consul 分布式服务发现系统
NSQ 亿级消息队列
TiDB 分布式数据库,基于 Go + Rust 开发
Etcd 分布式服务注册发现系统
Helm Kubernetes 包管理器
Istio Istio 用来提供一种统一化的微服务连接、安全保障、管理与监控方式
Jaeger Jaeger 是受 Dapper 和 OpenZipkin 的启发,由 Uber Technologies 创建的分布式追踪平台
OpenShift OpenShift 是由红帽推出的一款面向开源开发人员开放的平台即服务(PaaS)
go-ethereum Go 语言实现的区块链项目:以太坊
Tyk 功能完善的 API 网关
kratos Go 语言实现的微服务框架

小结

本节课介绍了 Go 生态中一些比较重要的开源项目,通过对这些开源项目的学习,可以极大地提高你的 Go 开发能力。最后附上 Go 开发者路线图 供你参考。