恭喜你,至此,你已经学习完了本课程最核心的内容。这些内容足以让你上手开发一个真正企业级的应用。这是一个好的开始,并不是结束。未来的你,还需要继续精进自己的 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 开源项目,你可以根据
Growing
、Popular
等维度去排序查看这些开源项目;GitHub Go Topic:GitHub 的 Go topic,在这个 Topic 中,你能够根据 Star 数、Fork 数、更新时间,去排序查看 Go 项目。
当然,还有很多其他途径去了解 Go 生态,如果你有不错的途径,欢迎评论区分享。
通过上面的途径,你可以了解很多 Go 生态中的技术栈、框架和开源项目。一般来说,这些文章会尽量列出一些优秀的实现,但是里面也有很多实现并不是优秀的。人的精力有限,你不可能将同类的功能实现都调研、学习一番,也没这个必要,这时候就需要你通过自己的了解,去筛选出优秀的实现,并加以学习和使用。
Go 语言生态中优秀的开源项目推荐
Go 语言有很多开源项目,仅仅 GitHub 就有 4 万多个大大小小的开源项目,其中不乏优秀的开源项目。这里我罗列一些我在做课程开发、项目开发中经常参考/使用的开源项目:
Go 项目开发中最常用的优秀 Go 包;
优秀的完整 Go 项目:如果你想学习 Go 项目开发或者想参考某些功能的实现方式,这些项目可以会给你一些参考;
其他常用的优秀 Go 包。
更多 Go 生态中优秀的开源项目,需要你去发现。
Go 项目开发中最常用的优秀 Go 包
这里,罗列一些 Go 项目开发中常用的软件包:
优秀、完整的 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 开发者路线图 供你参考。