写点什么

学习 Go 语言,有哪些优质的开源项目

作者:宇宙之一粟
  • 2024-04-18
    湖南
  • 本文字数:7103 字

    阅读完需:约 23 分钟

任何一门的学习的兴起都离不开开源社区的活跃,之前在自身学习 Go 语言就盘点过 Github 上 Star 数超过 20 K 的项目,这一次刚好再更新一下,这里除去本身非常庞大,著名,然后对于初学者只是有所耳闻,但实际上也限于学习和使用的 Kubernetes、Docker、etcd、TiDB、Hugo、CockroachDB 等等这种。


那么,接下来,在 2024 年,如果想要学习和深入 Go 语言,还能有哪些优质项目。

1. Top 级别:Awesome go

想要省时省力寻求 Go 项目的话,首推 Awesome Go——Go 编程语言的百科全书。庞大的项目库,包含了大量优质的 Go 框架、第三方库和软件。



开源地址:https://github.com/avelino/awesome-go


本开源项目涵盖众多项目,包括但不限于数据库、游戏开发、区块链、Web 开发框架、身份认证、持续集成、自动化构建等方面。项目多是优点也是缺点(容易进收藏夹吃灰),如果可以通过在实践中选择学习和使用效果可能更好。

2. Go 语言入门

语法本身类就有很多优质的开源项目,比如:

2.1 Go 语言圣经(中文版)

Go 语言圣经 《The Go Programming Language》 中文版本,仅供学习交流之用。



2.2 Go by Example

还记得几年前刚学习 Go 语言的时间,就特别喜欢这个项目里面的示例,阐释了什么就叫小而美:从 Hello World、泛型到并发编程等等。缺点可能就是作者也好几年没更新了,但是基本的语言点都是有的。目前已经出书了:



Go 是一种开源编程语言,专为构建简单、快速和可靠的软件而设计。请阅读官方文档,了解一些有关 Go 代码、工具包和模块的信息。Go by Example 是一个使用注释示例程序的 Go 实践入门教程。查看第一个示例或浏览下面的完整列表。


官网地址:https://gobyexample.com/


开源地址:https://github.com/mmcgrana/gobyexample


此外,作者还有一个开源项目 learngo,给出了 ❤️ 1000 多个手写的 Go 示例、练习和测验。 通过修复 1000 多个小程序来学习 go。


开源地址:https://github.com/inancgumus/learngo,⭐GitHub Star 数目前 18.3k

2.3 Go 语言设计与实现

这本书已经出书了,一开始关注上这个项目的时候,作者还只是开源了自己的网站,书中讲解了基础知识、编译原理、运行时和 Go 进阶知识,涵盖了 Go 语言设计原理,对于想要进阶 Go 语言是不可或缺的一本书,笔者也是在书一上线就购买了一本。


通过阅读本书,你能深入理解 Go 语言的设计与实现,包括且不仅限于以下的内容:

  • 理解编译器的词法与语法解析、类型检查、中间代码生成以及机器码生成过程;

  • 理解数组、切片、哈希表和字符串等数据结构的内部表示以及常见操作的原理;

  • 理解 Go 语言中的函数、方法以及反射等语言特性;

  • 理解常见并发原语 MutexWaitGroup 以及扩展原语的使用和原理;

  • 理解 make、new、defer、select、for 和 range 等关键字的实现;

  • 理解运行时中的调度器、网络轮询器、内存分配器、垃圾收集器的实现原理;

  • 理解 HTTP、RPC、JSON 等标准库的设计与原理;



书中示例代码:https://github.com/draveness/go-internal

2.4 Go 测试驱动开发

只有到真实项目中,才知道 TDD 的重要性,这个项目就是通过撰写测试来探索 Go 语言,打好 TDD 基础。Go 是学习 TDD 的好语言,因为它是一种简单易学的语言,而且内置了测试功能。从开始学习就让你的 Go 语言编写的更加健壮、测试友好。



开源地址:https://github.com/quii/learn-go-with-tests, ⭐GitHub Star 数目前 21.2k


中文版地址:https://studygolang.gitbook.io/learn-go-with-tests

2.5 Go Design patterns

说到程序语言,就离不开设计模式,Go 语言也能实现设计模式中的各种模式:创建型模式、结构型模式、行为型模式。这个项目就是 Go 语言的设计和应用模式精选集。


开源地址:https://github.com/tmrts/go-patterns


类似项目:

2.6 TheAlgorithms/Go

一个是大名鼎鼎的 The Algorithms, 这个仓库由众多大佬参与的用各种语言实现经典的算法:比如:二分搜索、快速排序、动态规划和常见数据结构等,像其标语所说的:目前 Github 最大的开源算法库。本人之前写的几篇数据结构的文章都得从这里来看看,同样是链表,学习我写的和大佬实现的有何差异,一旦发现有所考虑不全,立马向大佬学习。目前用 go 已经实现了的算法可以点 此处 ,比如著名的 LFU 和 LRU 算法(面试喜欢问的!)


官网: https://the-algorithms.com/


开源地址: https://github.com/TheAlgorithm


其他算法相关:

2.7 LeetCode Go

如果想从事 Go 语言开发,一个无可避免的地方就是需要算法面试,那你一定不能错过这个开源项目。halfrost 大佬花了一年用 Go 语言刷题,最后总结出这套 1000 多道题的 LeetCode 题解与心得,并将此题解制作成一本开源电子书,一经推出,得到众多大佬的推荐。作者表示,书中所有的代码题解都是 beats 100%,可谓是一本制作精良,Go 刷题必备“居家旅行”之好书。



开源地址:https://github.com/halfrost/LeetCode-Go

2.8 Go 本身

Go 源代码很容易阅读,你可以选择你感兴趣的部分,而且可能是最好的 Go 语言范例,针对新手,如果想学习 Go 语言,必不可少的需要下载 Go 安装包,针对大佬,如果想研究源码,当然也需要来这下载源代码



官网: https://go.dev/


开源地址: https://github.com/golang/go ,⭐GitHub Star 数目前 119k


国内官网镜像(访问快): https://golang.google.cn

3. Go 语言项目实战

3.1 Standard Go Project Layout

开源地址:https://github.com/golang-standards/project-layout, ⭐GitHub Star 数目前 45.6k


本开源项目提供了一个良好的项目组织架构,提供给 Go 开发者一个良好的应用程序项目的基本布局。虽然这不是 Go 核心开发团队定义的官方标准,但它是 Go 生态系统中一组常见的老项目和新项目的布局模式。其中一些模式比其他模式更受欢迎。它还具有许多小的增强,以及对任何足够大的实际应用程序通用的几个支持目录。


如果你尝试学习 Go,或者你正在为自己建立一个 PoC 或一个玩具项目,这个项目布局是没啥必要的。从一些非常简单的事情开始(一个 main.go 文件绰绰有余)。随着项目的增长,请记住保持代码结构良好非常重要,否则你最终会得到一个凌乱的代码,这其中就包含大量隐藏的依赖项和全局状态。当有更多的人参与这个项目时,你将需要更多的结构。这时候,介绍一种管理包/库的通用方法是很重要的。当你有一个开源项目时,或者当你知道其他项目从你的项目存储库中导入代码时,这时候拥有私有(又名 internal)包和代码就很重要。克隆存储库,保留你需要的内容,删除其他所有的内容!仅仅因为它在那里并不意味着你必须全部使用它。这些模式都没有在每个项目中使用。甚至 vendor 模式也不是通用的。

3.2 Distributed Transactions Manager

跨语言分布式事务管理器,DTM 是一款变革性的分布式事务框架,提供了傻瓜式的使用方式,极大的降低了分布式事务的使用门槛,改变了“能不用分布式事务就不用”的行业现状,优雅的解决了服务间的数据一致性问题。



开源地址:https://github.com/dtm-labs/dtm

3.3 ants

ants是一个高性能的 goroutine 池,实现了对大规模 goroutine 的调度管理、goroutine 复用,允许使用者在开发并发程序的时候限制 goroutine 数量,复用资源,达到更高效执行任务的效果。



开源地址:https://github.com/panjf2000/ants

3.4 Go kit

Go kit 是用 Go 语言构建微服务(或优雅的单体)的编程工具包。Go kit 解决了分布式系统和应用架构中的常见问题,因此您可以专注于提供业务价值。


开源地址:https://github.com/go-kit/kit,⭐GitHub Star 数目前 26.1k

3.5 chat

即时通讯全栈。后端采用纯 Go 语言,客户端支持 Android(Java)、iOS(Swift)和 Web(ReactJS),gRPC 客户端支持 C++、C#、Go、Java、Node、PHP、Python、Ruby、Objective-C 等语言。接口传输是通过 websocket 的 JSON(也可使用长轮询)或 gRPC 的 protobuf。


开源地址:https://github.com/tinode/chat

3.6 go-admin

记得在本科期间,大家最喜欢做的就是某某管理系统,这不 Go 语言也有国内大佬做出类型的功能:


基于 Gin + Vue + Element UI OR Arco Design OR Ant Design 的前后端分离权限管理系统,系统初始化极度简单,只需要配置文件中,修改数据库连接,系统支持多指令操作,迁移指令可以让初始化数据库信息变得更简单,服务指令可以很简单的启动 api 服务


开源地址:https://github.com/go-admin-team/go-admin ,⭐GitHub Star 数目前 10.7k

3.7 Gin

Gin 是一个使用 Go 语言开发的 Web 框架,它提供类似 Martini 的 API ,但性能更佳,速度提升高达 40 倍。一款盛名远扬的 Go Web 开发框架。特点是:功能强大、快速灵活、性能高,Gin 为 JSON,XML 和 HTML 渲染提供了易于使用的 API。



开源地址:https://github.com/gin-gonic/gin ,⭐GitHub Star 数目前 75.3k


基于 Gin 开发的框架还特别多,也没法一一举例:

  • gin-vue-admin:一个基于 vue 和 gin 开发的全栈前后端分离的开发基础平台,拥有 jwt 鉴权,动态路由,动态菜单,casbin 鉴权,表单生成器,代码生成器等功能,提供了多种示例文件,让大家把更多时间专注在业务开发上。开源地址:https://www.gin-vue-admin.com/

  • go-gin-api:基于 Gin 进行模块化设计的 API 框架,封装了常用功能,使用简单,致力于进行快速的业务研发。开源地址:https://github.com/xinliangnote/go-gin-api

3.8 go-zero

一个云原生 Go 微服务框架,带有提高生产力的 cli 工具。go-zero 是一个具有大量内置工程实践的网络和 rpc 框架。它的诞生是为了通过弹性设计确保繁忙服务的稳定性,多年来一直服务于拥有数千万用户的网站。


go-zero 包含极简的 API 定义和生成工具 goctl,可以根据定义的 api 文件一键生成 Go, iOS, Android, Kotlin, Dart, TypeScript, JavaScript 代码,并可直接运行。



使用 go-zero 的好处:


  • 轻松获得支撑千万日活服务的稳定性

  • 内建级联超时控制、限流、自适应熔断、自适应降载等微服务治理能力,无需配置和额外代码

  • 微服务治理中间件可无缝集成到其它现有框架使用

  • 极简的 API 描述,一键生成各端代码

  • 自动校验客户端请求参数合法性

  • 大量微服务治理和并发工具包


开源地址:https://github.com/zeromicro/go-zero ,⭐GitHub Star 数目前 27.5k

3.9 GoFrame

GoFrame 是一款模块化、高性能、企业级的 Go 基础开发框架,类似 PHP-Laravel、Java-SpringBoot、Python-Django。它旨在提供一套完整的基础设施建设以及开发工具链,以帮助开发者更高效地构建应用程序



官方网站:https://goframe.org/display/gf


开源地址:https://github.com/gogf/gf ,⭐GitHub Star 数目前 10.8k


同理,也会有大量的开发者会基于 GoFrame 二开项目:

  • gfast:gfast 是基于 GF(Go Frame)的后台管理系统 ,完善的权限用户管理,致力于快速高效开发 cms 系统、督办系统、后续将加入流程审批、工作流引擎、项目管理、挂图作战、数据大屏等功能。开源地址:https://github.com/tiger1103/gfast

3.10 GORM

一款 Go 语言的 ORM 库,具有灵活的可扩展插件 API:Database Resolver(多数据库,读写分离)、Prometheus。记得有一个前辈跟我说过,为了简化操作开源使用 ORM,如果需要做到性能最优,还是得靠 DBA 写一些高效的 SQL 语句。


没有一项工具是可以一劳永逸的,但是我们学习还是值得的。不知其所以,怎么知其不可以。


官网:https://gorm.io/


开源地址:https://github.com/go-gorm/gorm

3.11 Buffalo

Go 网络开发生态系统,旨在让您的生活更轻松。

3.12 Echo

众多 Go Web 框架的一个,根据官网介绍,它有着高性能、可扩展性、极简的特点。Echo 是个快速的 HTTP 路由器(零动态内存分配),也是 Go 的微型 Web 框架。Echo 的特点概述:


  • 优化的 HTTP 路由,可智能地优先路由

  • 方便构建强大且可扩展的 RESTful API

  • API 组

  • 可扩展的中间件框架,在多个级别定义中间件(root, group, route)

  • 为 JSON , XML 进行表单数据负载绑定

  • 发送各种 HTTP 响应的便捷功能

  • 集中式 HTTP 错误处理

  • 使用任何模板引擎进行模板渲染

  • 定义日志的格式

  • 高度个性化、可定制

  • 通过 Let’s Encrypt 实现自动 TLS

  • HTTP/2 支持



官方地址:https://echo.labstack.com/


Github 地址:https://github.com/labstack/echo

3.13 Iris

据官网介绍,Iris 是最快的 HTTP/2 Go Web 框架,简单易学。跨平台、具有强大的功能集、能够有效构建高性能 Web 应用程序和可移植性 API 。



官网:https://www.iris-go.com/,⭐GitHub Star 数目前 24.8k


Github 地址:https://github.com/kataras/iris

3.14 Fiber

Fiber 是一个简单快速的 Go Web 框架。 Fiber 专注于极致性能和低内存占用。它的灵感来自流行的 Express JS 框架。



官方地址:https://gofiber.io/

3.15 frp

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。frp 还提供 P2P 连接模式。


通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:

  • 客户端服务端通信支持 TCP、QUIC、KCP 以及 Websocket 等多种协议。

  • 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间,降低请求延迟。

  • 代理组间的负载均衡。

  • 端口复用,多个服务通过同一个服务端端口暴露。

  • 支持 P2P 通信,流量不经过服务器中转,充分利用带宽资源。

  • 多个原生支持的客户端插件(静态文件查看,HTTPS/HTTP 协议转换,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。

  • 高度扩展性的服务端插件系统,易于结合自身需求进行功能扩展。

  • 服务端和客户端 UI 页面。


开源地址:https://github.com/fatedier/frp ,⭐GitHub Star 数目前 79.2k

3.16 Traefik

一款开源的反向代理与负载均衡工具。它最大的优点是能够与常见的微服务系统直接整合,可以实现自动化动态配置。为了让系统好好上线,咱可得好好学吖。


官网:https://traefik.io/


开源地址:https://github.com/traefik/traefik

3.17 APIJSON

腾讯开源你的零代码接口和文档,JSON 协议 与 ORM 库



官方地址:http://apijson.cn/


开源地址:https://github.com/Tencent/APIJSON/stargazers,⭐GitHub Star 数目前 16.5k

3.18 golang-developer-roadmap

如果你想学习怎么成为一个好的 Go 语言开发这,那么你一定要学习这个路线图,当然里面的框架可以过时,所以你还是要时时刻刻关注最新技术,当时万变不离其宗,好的项目就算过时,也一定有它的学习价值,一起加油。



开源地址:https://github.com/Alikhll/golang-developer-roadmap

4. 总结

每当说起学习 Go 语言,总有很多值不值得学习的声音,比如就业前景,不如 Java 和 Python 火等等。目前笔者看来,这些好的优质项目也是对这些问题最好的回答,Go 语言是一个不断进步和适应新技术的过程。


到了 2024 年,Go 语言的核心概念和基础语法依旧保持相对稳定,但是随着社区的发展和技术的演进,新的工具、框架和最佳实践可能会不断出现。学习一门的语言最好的建议:


  1. 了解最新版本:Go 语言定期发布新版本,每个版本都可能带来新特性和改进。关注 Go 语言的官方博客和社区动态,了解最新的版本更新和特性。随时关注一些官方可能过时的语法或者技术。

  2. 掌握基础和并发编程:无论 Go 语言如何发展,扎实的基础知识始终是最重要的。确保你对 Go 的基础概念,如并发模型、接口、错误处理、切片、映射等有深入的理解。Go 语言的并发模型是其强大的特性之一。深入理解 Goroutines 和 Channels,以及如何安全地进行并发编程。

  3. 实践项目:通过实际项目来学习是非常有效的方法。尝试构建自己的小项目,或者参与开源项目,这样可以在实践中遇到并解决问题,同时学习到项目管理和协作的经验。

  4. 学习现代框架和工具:Go 社区提供了大量的框架和工具,如 Gin、Echo、Iris、GoFrame 等。了解并学习使用这些框架和工具,可以帮助你更高效地开发应用程序。

  5. 关注性能优化:随着应用程序规模的增长,性能优化变得越来越重要。学习如何编写高效的 Go 代码,了解如何分析和优化性能瓶颈。

  6. 参与社区:加入 Go 语言的社区,如 Golang 官方论坛、Reddit 的 r/golang 子版块、Stack Overflow 等。在社区中提问、回答问题、分享经验,可以帮助你保持最新的行业动态,并与其他开发者建立联系。

  7. 持续学习:技术是不断发展的,持续学习是跟上行业发展的关键。可以通过阅读技术博客、参加在线课程、观看技术会议等方式,不断更新你的知识库。

  8. 编写可测试的代码:测试是保证代码质量的重要手段。学习如何编写单元测试,了解 Go 语言的测试框架,确保你的代码具有可测试性。

  9. 探索新领域:Go 语言在云计算、微服务、容器化、分布式系统等领域有着广泛的应用。还有目前更好的 AIGC 领域,探索这些新领域,了解 Go 语言在这些领域的最新应用和趋势。


最后,坚持学习优质的开源项目,动手做项目,写代码,一起成为更好的 Gopher!

附录

肯定还有很多优质项目这篇文章会有遗漏,大家万千可以自己进行查询,推荐给大家的方法:


  • 方法 1:查看 Github Go Trending: https://github.com/trending/go,在这里,你能看到当前最新的 Go 语言趋势

  • 方法 2:Go 的开源优秀项目太多了。感兴趣的读者可以在 Github 的简单的一个搜索语法进行快速搜索,例如通过在搜索框中输入: go stars:>=20000,就能在全站中搜索标星超过 20 K 的项目


本文参与华为云社区【内容共创】活动第26期


任务 33:学习 Go 语言,有哪些优质的开源项目?


发布于: 刚刚阅读数: 3
用户头像

宇宙古今无有穷期,一生不过须臾,当思奋争 2020-05-07 加入

🏆InfoQ写作平台-签约作者 🏆 混迹于江湖,江湖却没有我的影子 热爱技术,专注于后端全栈,轻易不换岗 拒绝内卷,工作于外企开发,弹性不加班 热衷分享,执着于阅读写作,佛系不水文 同名公众号:《宇宙之一粟》

评论

发布
暂无评论
学习 Go 语言,有哪些优质的开源项目_GitHub_宇宙之一粟_InfoQ写作社区