Go 学习路线图,包括基础专栏,进阶专栏,源码阅读,实战开发,面试刷题,必读书单等一系列资源。
关注公众号:AlwaysBeta,回复「goebook」即可获得 Go 编程必读书籍。
- Go 专栏|开发环境搭建以及开发工具 VS Code 配置
- Go 专栏|变量和常量的声明与赋值
- Go 专栏|基础数据类型:整数、浮点数、复数、布尔值和字符串
- Go 专栏|复合数据类型:数组和切片 slice
- Go 专栏|复合数据类型:字典 map 和 结构体 struct
- Go 专栏|流程控制,一网打尽
- Go 专栏|函数那些事
- Go 专栏|错误处理:defer,panic 和 recover
- Go 专栏|说说方法
- Go 专栏|接口 interface
- Go 专栏|并发编程:goroutine,channel 和 sync
- 使用 Go 语言实现二叉搜索树
- 开源项目|Go 开发的一款分布式唯一 ID 生成系统
- 听说,99% 的 Go 程序员都被 defer 坑过
- 测试小姐姐问我 gRPC 怎么用,我直接把这篇文章甩给了她
- gRPC,爆赞
- 使用 grpcurl 通过命令行访问 gRPC 服务
- 推荐三个实用的 Go 开发工具
- Go 语言切片是如何扩容的?
- 读 Go 源码,可以试试这个工具
- Go Error 嵌套到底是怎么实现的?
- 为什么要避免在 Go 中使用 ioutil.ReadAll?
- 如何在 Go 中将 []byte 转换为 io.Reader?
- 开始读 Go 源码了
- 为什么说 Go 语言字符串是不可变的?
- 为什么 Go for-range 的 value 值地址每次都一样?
- 为什么 Go 语言 struct 要使用 tags
- 为什么 Go 不支持 []T 转换为 []interface
- 为什么要避免在 Go 中使用 ioutil.ReadAll?
- Go 语言 new 和 make 关键字的区别
- Go 语言数组和切片的区别
- Go 语言切片是如何扩容的?
- 为什么 Go for-range 的 value 值地址每次都一样?
- Go 语言 map 如何顺序读取?
- Go 语言 map 是并发安全的吗?
- Go 语言 select 都能做什么?
- Go 语言 context 都能做什么?
- 为什么说 Go 语言字符串是不可变的?
- 交替打印数字和字母
- 判断字符串中字符是否全都不同
- 翻转字符串
- 判断两个给定的字符串排序后是否一致
- 字符串替换问题
- 机器人坐标计算
- 语法题目一
- 语法题目二
- goroutine和channel使用一
- 实现阻塞读的并发安全Map
- 高并发下的锁与map读写问题
- 定时与 panic 恢复
- 为 sync.WaitGroup 中Wait函数支持 WaitTimeout 功能.
- 七道语法找错题目
- golang 并发题目测试
- 记一道字节跳动的算法面试题
- 多协程查询切片问题
- 对已经关闭的的chan进行读写,会怎么样?为什么?
- 简单聊聊内存逃逸?
- 字符串转成byte数组,会发生内存拷贝吗?
- http包的内存泄漏
- sync.Map 的用法
- Go语言的GPM调度器是什么?
- Goroutine调度策略
- goroutine调度器概述
网站链接: http://c.biancheng.net/golang/
这套 Go 语言教程通俗易懂,深入浅出,既适合没有基础的读者快速入门,也适合工作多年的程序员查阅知识点。
网站链接: https://www.runoob.com/go/go-tutorial.html
这个网站就不需要多介绍了吧,很多编程语言的入门教程都可以在这里找到。平时写代码过程中,某个知识点忘了,也可以到这里查。
网站链接: https://www.w3cschool.cn/go/
也是一个综合性的编程入门教程网站,资料很多,也都很基础。
网站链接: https://gobyexample.com/
很多代码示例,学习基础知识的时候很实用。可以一边看理论,一边参考这个网站写代码,效果会更好。
网站链接: https://www.topgoer.cn/
可以说是 Go 编程的导航网站了,收藏了很多 Go 学习资料。包括网站,书籍,开源库,开源项目等。
网站链接: https://mojotv.cn/
很不错的博客,里面很多 Go 进阶文章,还有其他方面的技术文章,值得一读。我试图找了一下作者信息,但是没找到。
网站链接: https://golang3.eddycjy.com/
煎鱼大佬的博客,结合官方资料和作者自己的理解,梳理出的一系列 Go 语言设计相关的理念和哲学的文章。
网站链接: https://draveness.me/golang/
左神的博客,内容很深,想要成为大神的话,绝对要来看。
网站链接: https://talkgo.org/
这是一个由众多资深 Gopher 组织的开源项目,主要是对 Go 源码进行解读。并且坚持开源,将相关资源都上传到了 GitHub。
百度云下载链接 密码:51fn
书单一共包含 10 本书,分为入门 5 本,进阶 5 本。我读过其中 7 本,另外 3 本虽然没读过,但也是网上推荐比较多的。
虽然分了入门和进阶,但是很多书中这两部分内容是都包含了的。大家看的时候可以根据自己的情况,先打好基础,再进行进阶。
有的书是开源的,可以直接在线阅读,有的有电子书,大家可以在这里 GitHub 找到下载方式。如果条件允许的话,买正版是最好的。
本书是一本面向 Go 语言初学者的书,内容也比较浅,非常适合入门。
书中循序渐进地介绍了使用 Go 语言必需知道的知识,展示了非常多生动有趣的例子,并通过提供大量练习来加深读者对书中所述内容的理解。
这本书的英文名称叫《The Way to Go》,作者利用业余时间来进行翻译工作。在取得原作者 Ivo Balbaert 授权的情况下,将其开源。
在线阅读: https://github.com/Unknwon/the-way-to-go_ZH_CN
本书以介绍 Go 语言特性为主,示例则尽量采用作者平常的实践,而不是一个没有太大实际意义的语法示范样例。通过与 C++ 和 Java 做一个横向比较,可以更直观看出其设计理念的差别。
作者许式伟为原金山 WPS 首席架构师、曾是盛大创新院研究员,目前是国内 Go 语言实践圈子公认的 Go 语言专家。参与本书写作的几位作者都是实际用 Go 语言开发的项目的开发人员,有较强的实战经验。
是一本着墨于 Go 语法语义以及运行时相关知识点的编程指导书(Go 1.17 就绪)。 此书旨在尽可能地帮助 Go 程序员更深更全面地理解 Go 语言。
此书也搜集了 Go 语言和 Go 编程中的很多细节,其中有一些在官方文档中从未提及。
此书同时适合 Go 初学者和有一定经验的 Go 程序员阅读。
在线阅读: https://gfw.go101.org/article/101.html
本书由作者 Kernighan 和谷歌公司 Go 团队主管 Alan Donovan 联袂撰写,是学习 Go 语言的指南级书籍。内容翔实全面,涵盖了全部基础内容,值得一读。
相比于其他技术书籍,这本书很薄。显然,这不是面面俱到,涵盖所有知识点的一本书,但它直击要点。
我在阅读过程中,最大的感受就是,很多看基础知识过程中碰到的,又很难通过搜索引擎找到答案的问题,在这里获得了解答。
学语言不是目的,能够使用这门语言来干活并挣到钱,才是目的。因此,不得不学一下 Go 在 Web 编程方面的应用。
这本书是由黄健宏翻译的,这位译者,还著有《Redis 设计与实现》一书,书中深入浅出地分析了 Redis 所用的数据结构和设计**,属实优秀。
涵盖 CGO、Go 汇编、RPC 实现、Web 框架、分布式系统等高阶主题。书中章节之间没有很强的关联性,每个章节都是独立的知识,完全可以按需阅读。
在线阅读: https://github.com/chai2010/advanced-go-programming-book
作者是雨痕大佬,2015 年第一届 GopherChina 大会讲师。
本书分上下两卷:
上卷细致解析了语言规范相关细节,便于读者深入理解语言相关功能的使用方法和注意事项。
下卷则对运行时源码做出深度剖析,引导读者透彻了解语言功能背后的支持环境和运行体系,诸如内存分配、垃圾回收和并发调度等。本书不适合编程初学入门,可供有实际编程经验或正在使用 Go 工作的人群参考。
本书使用浅显易懂的语言与大量图片深入介绍了 Go 语言编译时、类型系统、语法特性、函数调用规范、并发编程、内存管理与垃圾回收、运行状态监控等模块的使用方法和底层原理。
对于想要了解 Go 底层原理,阅读源码的同学来说,可以阅读此书,但想要完全理解书中的内容,并不是一件容易的事。
- 《Go 程序设计语言》--- 艾伦A.A.多诺万、布莱恩W.柯尼汉
- 《Go 语言编程》--- 许式伟
- 《Go 语言实战》--- 威廉·肯尼迪、布莱恩·克特森、埃里克·圣马丁
- 《Go 语言核心编程》--- 李文塔
- 《Go 语言学习笔记》--- 雨痕
- 《Go 编程并发实战》--- 郝林
- 《Go入门指南》
- 《Go语言标准库》
- 《Go Web 编程》
- 《Go语言博客实践》
- 《Go语言学习笔记》
- 《Go语言高级编程》
- 《Effective Go》
- 《Learning Go》英文版 => 《Learning Go》 中文版
- 《Go 命令教程》
- 《Network programming with Go》 => 中文版
- 《Practical Cryptography With Go》
- 《An Introduction to Programming in Go》
- 《Go Bootcamp》
- 《Mastering Concurrency in Go》 July 2014 Nathan Kozyra
- 《Go Programming Blueprints》 January 23,2015
- 《The Go Programming Language》 Published Oct 30, 2015,Not Yet Published
- 《Practical Go: Real world advice for writing maintainable Go programs》
- 《Go 语言圣经(中文版)》
- 《Go 语言并发编程》
- 《深入解析 Go》
Go 是一种开源编程语言,可以轻松构建简单、可靠和高效的软件。也正因为它简单、可靠、高效的特性,在使用 Go 语言开发 Web 应用时有以下的优势:
- 更简单
- 更强的编译能力
- 更高的性能
- 良好的 IDE 支持和调试功能
- 语法简单易上手
下面介绍 5 个开源 Web 框架,选择它们的标准是:在 GitHub 上 star 多,维护积极,被使用的多并且查找资料方便。
项目地址: https://github.com/gin-gonic/gin
一个完全由 Go 语言编写而成的 HTTP Web 框架,提供了一个速度更快的、性能更高的 Go 语言 Web 开发框架。
这个框架对于初学者来说很容易上手,而且在 Web 框架中,star 是最多的,使用的人也非常多。
项目地址: https://github.com/beego/beego
Beego 是一款由 Go 语言开发专家 Asta谢 开发的一款简单易用的企业级 Go 应用开发框架,具备全中文的官方网站和教程。
不同于其他框架语言,Beego 不仅仅提供图文教程,还提供了视频教程,这一点对国内的开发人员来讲是非常友好的。
项目地址: https://github.com/kataras/iris
Iris 框架在其官方网站上被描述为 Go 开发中最快的 Web 框架,并给出了多框架和多语言之间的性能对比。
如果你正在选择一款性能不错、轻量级且简单易上手的 Go 语言 Web 开发框架,Iris 是一个不错的选择。
项目地址: https://github.com/labstack/echo
Echo 是个快速的 HTTP 路由器(零动态内存分配),也是 Go 的微型 Web 框架。
其具备快速 HTTP 路由器、支持扩展中间件,同时还支持静态文件服务、WebSocket 以及支持制定绑定函数、制定相应渲染函数,并允许使用任意的 HTML 模版引擎。
项目地址: https://github.com/gogf/gf
GoFrame 是一款模块化、高性能、企业级的 Go 基础开发框架。GoFrame 不是一款 WEB/RPC 框架,而是一款通用性的基础开发框架,是 Golang 标准库的一个增强扩展级,包含通用核心的基础开发组件。
优点是实战化、模块化、文档全面、模块丰富、易用性高、通用性强、面向团队。
总体来说,这个项目具有完善的中文文档和周边开发库,活跃的 issue 讨论区,项目模块化设计很好。
这 5 个开源项目各有优劣,有的已经被市场验证,使用广泛;有的作为后起之秀,发展迅速。
大家可以挑选自己感兴趣的来学习和使用。
学完了理论,接下来就是实战,开始做项目。除了 Web 开发之外,还有很多方向可以选择,比如 db,cache,im 等等。而且作为练手项目,不能太复杂,否则根本看不懂,反而打击信心,起不到锻炼的效果。
这里我选择了 5 个项目,整体上来说,代码量不是很大,难度也适中。而且不同项目可以学习到不同的技术点,大家可以选择自己感兴趣的来尝试。
项目地址: https://github.com/yongxinz/id-maker
Go 开发的一款分布式唯一 ID 生成系统。
代码量少,项目整体难度小,通过这个项目可以学习到 httpServer,gRPC 相关知识。
项目地址: https://github.com/muesli/cache2go
比较简单的一个缓存库,代码量很少,适合新手学习。通过这个项目可以学习到锁、goroutine 等知识。
项目地址: https://github.com/flower-corp/rosedb
rosedb 是一个稳定、高性能、快速、内嵌的 k-v 存储引擎,支持多种数据结构,包含 String、List、Hash、Set、Sorted Set,接口名称风格和 Redis 类似。
项目使用纯 Golang 实现,Go 语言的绝大部分基础知识点都包含了,相信一定是学习和巩固 Golang 的很不错的项目。
除此之外,代码中还有一些数据结构的实现,所以同时也能学习一下数据结构的知识。
项目地址: https://github.com/songtianyi/wechat-go
这是微信 Web 版 API 的 Go 语言实现,模拟微信网页版的登录/联系人/消息收发等功能,可以完全接管微信收到的消息,并定制自己的发送内容。
我觉得这个项目还是挺有趣的,用来操作一下微信,能够体会到更多学习的乐趣。
项目地址: https://github.com/flipped-aurora/gin-vue-admin
gin-vue-admin 是一个使用 gin + vue 进行极速开发的全栈后台管理系统,后台使用 gin 框架,前端主要使用 vue。
项目的目录结构非常清晰,包名语义化,能够帮助你快速上手学习。
这个项目还使用到了一些流行的 Go 开源库及中间件,例如:
- gin:最流行的 Go 语言 Web 框架
- gorm:数据库操作中间件
- zap:uber 开源的 Go 语言日志库
- redis:k-v 缓存
除此之外,这个项目还有详细的中文文档,并且配套教学视频,值得学习。
随着编辑器的逐渐强大,有一些小而美的网站的功能已经被编辑器取代了,但依旧不妨碍我喜欢它们,下面都推荐给大家。
网站链接: https://mholt.github.io/json-to-go/
网站链接: https://zhwt.github.io/yaml-to-go/
网站链接: https://github.com/gohouse/converter
使用方式分两种,分别是命令行调用和写 Go 代码。两种方式都不复杂,具体见这篇文章:推荐三个实用的 Go 开发工具
网站链接: http://regoio.herokuapp.com/
Go 语言正则在线测试。
网站链接: https://www.dumels.com/
这个网站可以分析一个 Go 项目,然后生成接口和结构体的 UML 图。有了这个图之后,基本上也就对项目整体关系有了一个基本概念,再读源码的话,相对来说会容易一些。
具体见这篇文章:读 Go 源码,可以试试这个工具
网站链接: https://go.dev/play/
Go 语言代码在线运行。
现在的话,技术社区可能看的人越来越少了,也不那么活跃。从我个人的经验来说,也是这样,有什么问题直接谷歌了,基本不会先到技术社区去查去问。
在这里推荐几个我觉得还不错的,闲暇时间可以逛逛看。
-
文档:
- Go Code Review Comments:Go 语言代码风格指导
- Go Code Convention:无闻的 Go 语言编码规范
- Uber Go Guide: Uber Go 语言编码规范
- GopherCon 2014
- GopherCon 2015
- GopherCon 2016
- GopherCon 2017
- Go 项目标准布局
-
学习站点:
- Web 框架:
- ORM 以及数据库驱动:
- xorm:支持 MySQL、PostgreSQL、SQLite3 以及 MsSQL
- mgo:MongoDB 官方推荐驱动
- gorm: 全功能 ORM (无限接近) 支持 MySQL、PostgreSQL、SQLite3 以及 MsSQL
- gosql: gosql 一款全新ORM go-style风格、轻量、简单、强大 支持 MySQL
- redigo: Redigo is a Go client for the Redis database.
- TiDB: is an open-source NewSQL database that supports Hybrid Transactional and Analytical Processing (HTAP) workloads
- 实用库:
- converter: a lib for golang, generate mysql table schema to golang struct
- validator: Package validator implements value validations for structs and individual fields based on tags.
- cron: a cron library for go
- amqp: This is an AMQP 0.9.1 client with RabbitMQ extensions in Go.
- cli: cli is a simple, fast, and fun package for building command line apps in Go.
- viper: Viper is a complete configuration solution for Go applications including 12-Factor apps.
- ants: ants 是一个高性能的 goroutine 池,实现了对大规模 goroutine 的调度管理、goroutine 复用,允许使用者在开发并发程序的时候限制 goroutine 数量,复用资源,达到更高效执行任务的效果。
- cel-go: Fast, portable, non-Turing complete expression evaluation with gradual typing (Go)
- 其他:
-
基础:
- Go Slices and Bytes - Shakeel Mahate:Youtube
-
COSCUP 2013:
- Golang & ORM - 林佑安:Youtube
-
GopherCon:
-
Golang UK Conference:
-
GopherCon India 2015: Youtube
文中分享书籍全部来源于网络其他人的整理,这里只是收集整理了他们的链接,如有侵权,马上联系我,我立马删除对应链接。