Go 学习路线(2022)
<p><strong>原文链接:</strong> Go 学习路线(2022)</p><p>Go 语言的发展越来越好了,很多大厂使用 Go 作为主要开发语言,也有很多人开始学习 Go,准备转 Go 开发。</p>
<p>那么,怎么学呢?</p>
<p>我发现,在互联网时代,学习的困难不是说没有资料,而是资料太多,不知道应该看哪个,从哪开始看。</p>
<p>所以,我整理了一份 Go 学习路线,这份学习路线不以数量取胜,努力做到精简。从基础到进阶,从理论到实战,一共包括以下几个内容:</p>
<ul>
<li>入门教程</li>
<li>进阶教程</li>
<li>书籍推荐</li>
<li>Web 开发</li>
<li>练手项目</li>
<li>实用工具</li>
<li>技术社区</li>
</ul>
<p><img src="https://cdn.jsdelivr.net/gh/yongxinz/picb@main/data/Go%20%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF.png"></p>
<p>这份学习路线还会不断优化更新,感兴趣的同学可以收藏这个链接:https://github.com/yongxinz/gopher,第一时间获取最新资源,如果能给个 <strong>star</strong> 那就太谢谢了。</p>
<h2 id="入门教程">入门教程</h2>
<p><img src="https://cdn.jsdelivr.net/gh/yongxinz/picb@main/data/Go%20%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B.png"></p>
<h3 id="go-语言中文网---go-语言入门教程">Go 语言中文网 - Go 语言入门教程</h3>
<p><strong>网站链接:</strong> http://c.biancheng.net/golang/</p>
<p><img src="https://cdn.jsdelivr.net/gh/yongxinz/picb@main/data/biancheng.png"></p>
<p>这套 Go 语言教程通俗易懂,深入浅出,既适合没有基础的读者快速入门,也适合工作多年的程序员查阅知识点。</p>
<h3 id="菜鸟教程---go-语言教程">菜鸟教程 - Go 语言教程</h3>
<p><strong>网站链接:</strong> https://www.runoob.com/go/go-tutorial.html</p>
<p><img src="https://cdn.jsdelivr.net/gh/yongxinz/picb@main/data/runoob.png"></p>
<p>这个网站就不需要多介绍了吧,很多编程语言的入门教程都可以在这里找到。平时写代码过程中,某个知识点忘了,也可以到这里查。</p>
<h3 id="w3cshcool---go-教程">W3Cshcool - Go 教程</h3>
<p><strong>网站链接:</strong> https://www.w3cschool.cn/go/</p>
<p><img src="https://cdn.jsdelivr.net/gh/yongxinz/picb@main/data/w3c.png"></p>
<p>也是一个综合性的编程入门教程网站,资料很多,也都很基础。</p>
<h3 id="go-by-example">Go by Example</h3>
<p><strong>网站链接:</strong> https://gobyexample.com/</p>
<p><img src="https://cdn.jsdelivr.net/gh/yongxinz/picb@main/data/gobyexample.png"></p>
<p>很多代码示例,学习基础知识的时候很实用。可以一边看理论,一边参考这个网站写代码,效果会更好。</p>
<h3 id="地鼠文档">地鼠文档</h3>
<p><strong>网站链接:</strong> https://www.topgoer.cn/</p>
<p><img src="https://cdn.jsdelivr.net/gh/yongxinz/picb@main/data/topgoer.png"></p>
<p>可以说是 Go 编程的导航网站了,收藏了很多 Go 学习资料。包括网站,书籍,开源库,开源项目等。</p>
<h2 id="进阶教程">进阶教程</h2>
<p><img src="https://cdn.jsdelivr.net/gh/yongxinz/picb@main/data/Go%20%E8%BF%9B%E9%98%B6%E6%95%99%E7%A8%8B.png"></p>
<h3 id="mojotv-博客">mojotv 博客</h3>
<p><strong>网站链接:</strong> https://mojotv.cn/</p>
<p><img src="https://cdn.jsdelivr.net/gh/yongxinz/picb@main/data/mojitv.png"></p>
<p>很不错的博客,里面很多 Go 进阶文章,还有其他方面的技术文章,值得一读。我试图找了一下作者信息,但是没找到。</p>
<h3 id="煎鱼---go-语言设计哲学">煎鱼 - Go 语言设计哲学</h3>
<p><strong>网站链接:</strong> https://golang3.eddycjy.com/</p>
<p><img src="https://cdn.jsdelivr.net/gh/yongxinz/picb@main/data/eddycjy.png"></p>
<p>煎鱼大佬的博客,结合官方资料和作者自己的理解,梳理出的一系列 Go 语言设计相关的理念和哲学的文章。</p>
<h3 id="面向信仰编程---go-语言设计与实现">面向信仰编程 - Go 语言设计与实现</h3>
<p><strong>网站链接:</strong> https://draveness.me/golang/</p>
<p><img src="https://cdn.jsdelivr.net/gh/yongxinz/picb@main/data/draveness.png"></p>
<p>左神的博客,内容很深,想要成为大神的话,绝对要来看。</p>
<h3 id="go-夜读">Go 夜读</h3>
<p><strong>网站链接:</strong> https://talkgo.org/</p>
<p>这是一个由众多资深 Gopher 组织的开源项目,主要是对 Go 源码进行解读。并且坚持开源,将相关资源都上传到了 GitHub。</p>
<h2 id="书籍推荐">书籍推荐</h2>
<p>书单一共包含 10 本书,分为入门 5 本,进阶 5 本。我读过其中 7 本,另外 3 本虽然没读过,但也是网上推荐比较多的。</p>
<p>虽然分了入门和进阶,但是很多书中这两部分内容是都包含了的。大家看的时候可以根据自己的情况,先打好基础,再进行进阶。</p>
<p>有的书是开源的,可以直接在线阅读,有的有电子书,大家可以在这里 GitHub 找到下载方式。如果条件允许的话,买正版是最好的。</p>
<p><img src="https://cdn.jsdelivr.net/gh/yongxinz/picb@main/data/Go%20%E4%B9%A6%E7%B1%8D%E6%8E%A8%E8%8D%90.png"></p>
<h3 id="入门">入门</h3>
<h4 id="go语言趣学指南">《Go语言趣学指南》</h4>
<p><img src="https://cdn.jsdelivr.net/gh/yongxinz/picb@main/data/gobook-1.png"></p>
<p>本书是一本面向 Go 语言初学者的书,内容也比较浅,非常适合入门。</p>
<p>书中循序渐进地介绍了使用 Go 语言必需知道的知识,展示了非常多生动有趣的例子,并通过提供大量练习来加深读者对书中所述内容的理解。</p>
<h4 id="go-入门指南">《Go 入门指南》</h4>
<p>这本书的英文名称叫《The Way to Go》,作者利用业余时间来进行翻译工作。在取得原作者 Ivo Balbaert 授权的情况下,将其开源。</p>
<p><strong>在线阅读:</strong> https://github.com/Unknwon/the-way-to-go_ZH_CN</p>
<h4 id="go-语言编程">《Go 语言编程》</h4>
<p><img src="https://cdn.jsdelivr.net/gh/yongxinz/picb@main/data/gobook-2.png"></p>
<p>本书以介绍 Go 语言特性为主,示例则尽量采用作者平常的实践,而不是一个没有太大实际意义的语法示范样例。通过与 C++ 和 Java 做一个横向比较,可以更直观看出其设计理念的差别。</p>
<p>作者许式伟为原金山 WPS 首席架构师、曾是盛大创新院研究员,目前是国内 Go 语言实践圈子公认的 Go 语言专家。参与本书写作的几位作者都是实际用 Go 语言开发的项目的开发人员,有较强的实战经验。</p>
<h4 id="go-语言-101">《Go 语言 101》</h4>
<p>是一本着墨于 Go 语法语义以及运行时相关知识点的编程指导书(Go 1.17 就绪)。 此书旨在尽可能地帮助 Go 程序员更深更全面地理解 Go 语言。</p>
<p>此书也搜集了 Go 语言和 Go 编程中的很多细节,其中有一些在官方文档中从未提及。</p>
<p>此书同时适合 Go 初学者和有一定经验的 Go 程序员阅读。</p>
<p><strong>在线阅读:</strong> https://gfw.go101.org/article/101.html</p>
<h4 id="go-语言程序设计">《Go 语言程序设计》</h4>
<p><img src="https://cdn.jsdelivr.net/gh/yongxinz/picb@main/data/gobook-3.png"></p>
<p>本书由作者 Kernighan 和谷歌公司 Go 团队主管 Alan Donovan 联袂撰写,是学习 Go 语言的指南级书籍。内容翔实全面,涵盖了全部基础内容,值得一读。</p>
<h3 id="进阶">进阶</h3>
<h4 id="go-语言实战">《Go 语言实战》</h4>
<p><img src="https://cdn.jsdelivr.net/gh/yongxinz/picb@main/data/gobook-4.png"></p>
<p>相比于其他技术书籍,这本书很薄。显然,这不是面面俱到,涵盖所有知识点的一本书,但它直击要点。</p>
<p>我在阅读过程中,最大的感受就是,很多看基础知识过程中碰到的,又很难通过搜索引擎找到答案的问题,在这里获得了解答。</p>
<h4 id="go-web-编程">《Go Web 编程》</h4>
<p><img src="https://cdn.jsdelivr.net/gh/yongxinz/picb@main/data/gobook-5.png"></p>
<p>学语言不是目的,能够使用这门语言来干活并挣到钱,才是目的。因此,不得不学一下 Go 在 Web 编程方面的应用。</p>
<p>这本书是由黄健宏翻译的,这位译者,还著有《Redis 设计与实现》一书,书中深入浅出地分析了 Redis 所用的数据结构和设计思想,属实优秀。</p>
<h4 id="go-语言高级编程">《Go 语言高级编程》</h4>
<p><img src="https://cdn.jsdelivr.net/gh/yongxinz/picb@main/data/gobook-6.png"></p>
<p>涵盖 CGO、Go 汇编、RPC 实现、Web 框架、分布式系统等高阶主题。书中章节之间没有很强的关联性,每个章节都是独立的知识,完全可以按需阅读。</p>
<p><strong>在线阅读:</strong> https://github.com/chai2010/advanced-go-programming-book</p>
<h4 id="go-语言学习笔记">《Go 语言学习笔记》</h4>
<p><img src="https://cdn.jsdelivr.net/gh/yongxinz/picb@main/data/gobook-7.png"></p>
<p>作者是雨痕大佬,2015 年第一届 GopherChina 大会讲师。</p>
<p>本书分上下两卷:</p>
<p>上卷细致解析了语言规范相关细节,便于读者深入理解语言相关功能的使用方法和注意事项。</p>
<p>下卷则对运行时源码做出深度剖析,引导读者透彻了解语言功能背后的支持环境和运行体系,诸如内存分配、垃圾回收和并发调度等。本书不适合编程初学入门,可供有实际编程经验或正在使用 Go 工作的人群参考。</p>
<h4 id="go-语言底层原理剖析">《Go 语言底层原理剖析》</h4>
<p><img src="https://cdn.jsdelivr.net/gh/yongxinz/picb@main/data/gobook-8.png"></p>
<p>本书使用浅显易懂的语言与大量图片深入介绍了 Go 语言编译时、类型系统、语法特性、函数调用规范、并发编程、内存管理与垃圾回收、运行状态监控等模块的使用方法和底层原理。</p>
<p>对于想要了解 Go 底层原理,阅读源码的同学来说,可以阅读此书,但想要完全理解书中的内容,并不是一件容易的事。</p>
<h2 id="web-开发">Web 开发</h2>
<p>Go 是一种开源编程语言,可以轻松构建简单、可靠和高效的软件。也正因为它简单、可靠、高效的特性,在使用 Go 语言开发 Web 应用时有以下的优势:</p>
<ol>
<li>更简单</li>
<li>更强的编译能力</li>
<li>更高的性能</li>
<li>良好的 IDE 支持和调试功能</li>
<li>语法简单易上手</li>
</ol>
<p>下面介绍 5 个开源 Web 框架,选择它们的标准是:在 GitHub 上 star 多,维护积极,被使用的多并且查找资料方便。</p>
<p><img src="https://cdn.jsdelivr.net/gh/yongxinz/picb@main/data/Go%20Web%20%E5%BC%80%E5%8F%91.png"></p>
<h3 id="gin">Gin</h3>
<p><strong>项目地址:</strong> https://github.com/gin-gonic/gin</p>
<p>一个完全由 Go 语言编写而成的 HTTP Web 框架,提供了一个速度更快的、性能更高的 Go 语言 Web 开发框架。</p>
<p>这个框架对于初学者来说很容易上手,而且在 Web 框架中,star 是最多的,使用的人也非常多。</p>
<h3 id="beego">Beego</h3>
<p><strong>项目地址:</strong> https://github.com/beego/beego</p>
<p>Beego 是一款由 Go 语言开发专家 Asta谢 开发的一款简单易用的企业级 Go 应用开发框架,具备全中文的官方网站和教程。</p>
<p>不同于其他框架语言,Beego 不仅仅提供图文教程,还提供了视频教程,这一点对国内的开发人员来讲是非常友好的。</p>
<h3 id="iris">Iris</h3>
<p><strong>项目地址:</strong> https://github.com/kataras/iris</p>
<p>Iris 框架在其官方网站上被描述为 Go 开发中最快的 Web 框架,并给出了多框架和多语言之间的性能对比。</p>
<p>如果你正在选择一款性能不错、轻量级且简单易上手的 Go 语言 Web 开发框架,Iris 是一个不错的选择。</p>
<h3 id="echo">Echo</h3>
<p><strong>项目地址:</strong> https://github.com/labstack/echo</p>
<p>Echo 是个快速的 HTTP 路由器(零动态内存分配),也是 Go 的微型 Web 框架。</p>
<p>其具备快速 HTTP 路由器、支持扩展中间件,同时还支持静态文件服务、WebSocket 以及支持制定绑定函数、制定相应渲染函数,并允许使用任意的 HTML 模版引擎。</p>
<h3 id="goframe">GoFrame</h3>
<p><strong>项目地址:</strong> https://github.com/gogf/gf</p>
<p>GoFrame 是一款模块化、高性能、企业级的 Go 基础开发框架。GoFrame 不是一款 WEB/RPC 框架,而是一款通用性的基础开发框架,是 Golang 标准库的一个增强扩展级,包含通用核心的基础开发组件。</p>
<p>优点是实战化、模块化、文档全面、模块丰富、易用性高、通用性强、面向团队。</p>
<p>总体来说,这个项目具有完善的中文文档和周边开发库,活跃的 issue 讨论区,项目模块化设计很好。</p>
<p>这 5 个开源项目各有优劣,有的已经被市场验证,使用广泛;有的作为后起之秀,发展迅速。</p>
<p>大家可以挑选自己感兴趣的来学习和使用。</p>
<h2 id="练手项目">练手项目</h2>
<p>学完了理论,接下来就是实战,开始做项目。除了 Web 开发之外,还有很多方向可以选择,比如 db,cache,im 等等。而且作为练手项目,不能太复杂,否则根本看不懂,反而打击信心,起不到锻炼的效果。</p>
<p>这里我选择了 5 个项目,整体上来说,代码量不是很大,难度也适中。而且不同项目可以学习到不同的技术点,大家可以选择自己感兴趣的来尝试。</p>
<p><img src="https://cdn.jsdelivr.net/gh/yongxinz/picb@main/data/Go%20%E7%BB%83%E6%89%8B%E9%A1%B9%E7%9B%AE.png"></p>
<h3 id="id-maker">id-maker</h3>
<p><strong>项目地址:</strong> https://github.com/yongxinz/id-maker</p>
<p>Go 开发的一款分布式唯一 ID 生成系统。</p>
<p>代码量少,项目整体难度小,通过这个项目可以学习到 httpServer,gRPC 相关知识。</p>
<h3 id="cache2go">cache2go</h3>
<p><strong>项目地址:</strong> https://github.com/muesli/cache2go</p>
<p>比较简单的一个缓存库,代码量很少,适合新手学习。通过这个项目可以学习到锁、goroutine 等知识。</p>
<h3 id="rosedb">rosedb</h3>
<p><strong>项目地址:</strong> https://github.com/flower-corp/rosedb</p>
<p>rosedb 是一个稳定、高性能、快速、内嵌的 k-v 存储引擎,支持多种数据结构,包含 String、List、Hash、Set、Sorted Set,接口名称风格和 Redis 类似。</p>
<p>项目使用纯 Golang 实现,Go 语言的绝大部分基础知识点都包含了,相信一定是学习和巩固 Golang 的很不错的项目。</p>
<p>除此之外,代码中还有一些数据结构的实现,所以同时也能学习一下数据结构的知识。</p>
<h3 id="wechat-go">wechat-go</h3>
<p><strong>项目地址:</strong> https://github.com/songtianyi/wechat-go</p>
<p>这是微信 Web 版 API 的 Go 语言实现,模拟微信网页版的登录/联系人/消息收发等功能,可以完全接管微信收到的消息,并定制自己的发送内容。</p>
<p>我觉得这个项目还是挺有趣的,用来操作一下微信,能够体会到更多学习的乐趣。</p>
<h3 id="gin-vue-admin">gin-vue-admin</h3>
<p><strong>项目地址:</strong> https://github.com/flipped-aurora/gin-vue-admin</p>
<p>gin-vue-admin 是一个使用 gin + vue 进行极速开发的全栈后台管理系统,后台使用 gin 框架,前端主要使用 vue。</p>
<p>项目的目录结构非常清晰,包名语义化,能够帮助你快速上手学习。</p>
<p>这个项目还使用到了一些流行的 Go 开源库及中间件,例如:</p>
<ul>
<li>gin:最流行的 Go 语言 Web 框架</li>
<li>gorm:数据库操作中间件</li>
<li>zap:uber 开源的 Go 语言日志库</li>
<li>redis:k-v 缓存</li>
</ul>
<p>除此之外,这个项目还有详细的中文文档,并且配套教学视频,值得学习。</p>
<h2 id="实用工具">实用工具</h2>
<p>随着编辑器的逐渐强大,有一些小而美的网站的功能已经被编辑器取代了,但依旧不妨碍我喜欢它们,下面都推荐给大家。</p>
<p><img src="https://cdn.jsdelivr.net/gh/yongxinz/picb@main/data/Go%20%E5%AE%9E%E7%94%A8%E5%B7%A5%E5%85%B7.png"></p>
<h3 id="json-to-go-struct">JSON to Go struct</h3>
<p><strong>网站链接:</strong> https://mholt.github.io/json-to-go/</p>
<h3 id="yaml-to-go-struct">YAML to Go struct</h3>
<p><strong>网站链接:</strong> https://zhwt.github.io/yaml-to-go/</p>
<h3 id="table-to-go-struct">Table to Go struct</h3>
<p><strong>网站链接:</strong> https://github.com/gohouse/converter</p>
<p>使用方式分两种,分别是命令行调用和写 Go 代码。两种方式都不复杂,具体见这篇文章:推荐三个实用的 Go 开发工具</p>
<h3 id="rego">Rego</h3>
<p><strong>网站链接:</strong> http://regoio.herokuapp.com/</p>
<p><img src="https://cdn.jsdelivr.net/gh/yongxinz/picb@main/data/rego.png"></p>
<p>Go 语言正则在线测试。</p>
<h3 id="plantuml">plantUML</h3>
<p><strong>网站链接:</strong> https://www.dumels.com/</p>
<p><img src="https://cdn.jsdelivr.net/gh/yongxinz/picb@main/data/dumels-2.png"></p>
<p>这个网站可以分析一个 Go 项目,然后生成接口和结构体的 UML 图。有了这个图之后,基本上也就对项目整体关系有了一个基本概念,再读源码的话,相对来说会容易一些。</p>
<p>具体见这篇文章:读 Go 源码,可以试试这个工具</p>
<h3 id="playground">Playground</h3>
<p><strong>网站链接:</strong> https://go.dev/play/</p>
<p><img src="https://cdn.jsdelivr.net/gh/yongxinz/picb@main/data/playground.png"></p>
<p>Go 语言代码在线运行。</p>
<h2 id="技术社区">技术社区</h2>
<p>现在的话,技术社区可能看的人越来越少了,也不那么活跃。从我个人的经验来说,也是这样,有什么问题直接谷歌了,基本不会先到技术社区去查去问。</p>
<p><img src="https://cdn.jsdelivr.net/gh/yongxinz/picb@main/data/Go%20%E6%8A%80%E6%9C%AF%E7%A4%BE%E5%8C%BA.png"></p>
<p>在这里推荐几个我觉得还不错的,闲暇时间可以逛逛看。</p>
<ul>
<li>Go 官网</li>
<li>Go 官方邮件讨论组</li>
<li>Go 语言中文网</li>
<li>Go Forum</li>
<li>Golang 中国</li>
</ul>
<p>除此之外,还有两个网站很重要,就是 GitHub 和 stackoverflow。保守估计,这两个网站撑起了程序员一半的工资。</p>
<p>以上就是本文的全部内容,希望各位大佬学的开心。</p>
<p>文中涉及到的全部资源,包括电子书,脑图等都会开源到 GitHub。并且,这个学习路线还会不停维护和更新,大家也可以关注我的 GitHub,这样就可以第一时间获取最新资源。</p>
<p>如果觉得本文还可以的话,欢迎<strong>点赞</strong>,<strong>分享</strong>,感谢支持。</p>
<hr>
<p><strong>开源地址:</strong></p>
<ul>
<li>https://github.com/yongxinz/gopher</li>
</ul><br><br>
来源:https://www.cnblogs.com/alwaysbeta/p/15869763.html
頁:
[1]