专栏首页roseduan写字的地方Go 语言学习路线来啦

Go 语言学习路线来啦

时不时的有人问我一些关于 Go 语言学习路线、学习资源方面的问题,这篇文章就来详细说一说。借此希望给那些正在学习,或是想学习 Go 语言的朋友一些帮助。

需要说明的是,按照我推荐的来学习,完全掌握 Go 相关开发知识,并且找到 Go 开发的工作应该是问题不大的,当然具体能达到什么样的程度,得看个人了。

提醒一下,文中提到的所有书籍,都可以在公众号后台回复相应的关键字获取:算法、操作系统、网络、数据库、Go、微服务,按需自取。


一、基础知识

无论你学习什么编程语言,这些基础知识是通用的,并且它们很重要,所以我觉得还是拿出来说一说,只不过现在网上这方面的知识已经很多了,知乎、公众号搜一下,就能够找到很多相关的内容,所以我这里就简单说下。

数据结构和算法

推荐入门书籍《大话数据结构》、《啊哈!算法》、《漫画算法·小灰的算法之旅》、《算法图解》,进阶的话可以看看《算法导论》、《算法》。

如果觉得书籍比较枯燥,网上也有一些付费专栏,可以订阅来看看。注意一点,如果不是搞算法方向的话,掌握最基础常用的内容就可以了,没必要去死磕太多高级的数据结构和算法。

巩固算法知识的话,可以上 Leetcode 刷几个题。当然,这块内容还有一个作用,那就是应付面试,大家都懂的。我的 Github 上面有一个项目,可以帮助学习学习和巩固算法,地址:

https://github.com/roseduan/algo-learn

项目使用 Go、Java、Python 实现了常用的数据结构和算法,以及相关 Leetcode 题目。

操作系统

这块的内容,简单看下就好,了解下基础的概念,在工作的前几年里,你可能不太会用得上太多操作系统上面的知识,但相信我,这是职业生涯进阶必过的坎,迟早会遇上的。

学习资源推荐:书籍《操作系统概念》、《深入理解计算机系统》、《现代操

作系统》。

书籍看不下去的,很能理解你(因为我也看不下去),这里推荐一个学堂在线的操作系统课程:

https://www.xuetangx.com/course/THU08091000267/1516699

是清华大学的公开课程,概念比较基础容易理解,想要进阶深入的话,人家也有配套的操作系统实验可以跟着做。

计算机网络

基础书籍:《图解 HTTP》、《图解 TCP_IP》、《网络是怎样连接的》。

进阶书籍:《计算机网络·自顶向下方法》、《TCP_IP 详解》。

同样,知道你看不下去书籍,在中国大学 MOOC 上面有一些名校的公开的网络课程,都是比较基础的,可以在上面找找,有挺多质量不错的。

数据库

数据库的重要性就不用说了,必备的知识。

基础的 sql 掌握起来应该没啥难度,自己多练练就行了,推荐书籍《SQL 必知必会》、《MySQL 必知必会》。

想要进阶,可以多了解下数据库一些基本设计概念,推荐书籍《数据库系统概念》,对于 mysql 进阶,例如 B+ 树存储模型、事务、索引、锁等,推荐书籍《高性能 mysql》、《MySQL 技术内幕:InnoDB 存储引擎》。

二、Go 语言基础

说到正题 Go 语言了,如果你是 Go 语言零基础,或者刚入门不久,都可以顺着我的这个路径学习巩固一下。

推荐入门书籍《Go 语言学习笔记》、《Go 语言趣学指南》、《Head First Go》,跟着书籍多敲敲代码,入门没有太大的问题。

还有我私藏的一些在线学习 Go 语言的资料:

1. Go By Example 中文版 : https://gobyexample-cn.github.io,使用代码示例来学习 Go 语言。

2. Go 面试题 : http://www.topgoer.cn/docs/gomianshiti/mianshiti,也是使用代码示例来讲解 Go,用来准备面试也是很好的。

3. 无闻大佬的在线入门指南 : https://github.com/unknwon/the-way-to-go_ZH_CN

4. 跟着单元测试学习 Go : https://github.com/quii/learn-go-with-tests,有中文版。

学完基础,知道你可能想试试手,这里推荐几个初级的项目,随意挑选自己感兴趣的一两个即可。

1. starcharts : https://github.com/caarlos0/starcharts,项目的功能是生成 Github 上面的项目的 star 趋势图,核心代码不多,用来练手很合适。

2. gorched : https://github.com/zladovan/gorched,使用 Go 写的一个小游戏。

3. pacgo : https://github.com/danicat/pacgo,也是使用 Go 写的一个小游戏,每一步都有详细的描述和代码实现。

4. wechat-go : https://github.com/songtianyi/wechat-go,微信 web 版 API 的 Go 实现,模拟微信网页版的登录/联系人/消息收发等功能。

三、Go 语言进阶

掌握了基础的 Go 相关语法知识之后,可能需要更加深入的理解 Go 语言,对于初学者来说,可以挑选自己感兴趣的部分看看,想一下子全部吃透不太可能。

注意这块内容是比较独立的,可随时查看,不会妨碍你学习后面的内容。

这里推荐书籍《Go 程序设计语言》(号称 Go 圣经)、《Go 专家编程》、《Go 语言高级编程》。

在线的学习资料:

1.《Go 语言设计与实现》: https://draveness.me/golang。

2.《Go 语言高级编程》: https://chai2010.cn/advanced-go-programming-book。

想要进一步巩固所学知识,这里推荐几个比较进阶的项目给你:

1. rosedb : https://github.com/roseduan/rosedb,不要脸的推荐一下自己的项目,一个用 Go 实现的简易高效的 k-v 存储引擎。

2. gochat : https://github.com/LockGit/gochat,一个 Go 语言实现的轻量级 im 系统,对网络方面熟悉或者感兴趣的可以看看。

3. 7DaysGolang : https://github.com/geektutu/7days-golang,7 天使用 Go 从零实现 web 框架、分布式缓存、ORM 框架,、RPC 框架,代码量不多,但是质量挺不错的。

四、Web 开发

基础知识掌握之后,可以上手做一些 web 应用,进一步了解更多的 Go 语言相关框架以及生产环境中的常用中间件,推荐书籍《Go Web 编程》。

可以学习下 web 框架 Gin、beego:两个框架都比较的流行,选择其中一个其实就可以了,推荐 Gin。官方文档都有中文,照着 demo 敲一下,了解下怎么处理 HTTP 请求的。

最好掌握一下比较流行的 ORM 框架 Gorm,有官方中文文档,照着 demo 敲一下基本上两天就能掌握了,后面遇到不会的再来查。

基本上看官方文档就可以了,不用去找其他的书籍,没有比官方文章更正宗的资料了。

推荐几个使用 Go 构建的基础 web 项目:

1. gin-vue-admin : https://github.com/flipped-aurora/gin-vue-admin,使用 Gin 框架构建的后台管理系统。

2. ferry : https://github.com/lanyulei/ferry,基于 Gin + Vue + Element UI 前后端分离的工单系统。

3. go-admin : https://github.com/go-admin-team/go-admin,Gin + Vue + Element UI 的前后端分离权限管理系统。

对于 web 项目的学习,可能有同学觉得项目太庞杂,根本不知道怎么下手。我想建议的是,可以在本地把项目跑起来,然后断点调试一个 HTTP 请求的整体流程,搞懂了一个接口,其他的大同小异。

五、微服务

目前 Go 在微服务中的应用也比较广泛,但说实话,微服务是一个太庞大的话题,你不可能把每一个核心的问题都能够搞清楚,而且也没条件,或许只能在公司的具体的微服务生产环境中,才能够对相关的概念有更加深刻的体会。

推荐一本微服务概述的基础书籍《微服务设计》、《微服务架构设计模式》,可以帮助你理解微服务的建模、集成、测试、部署和监控的一些基础知识。

推荐 Go 语言的微服务框架 GoKit、GoMicro、go-zero、kratos,可以随便选择一个,理解其基本的用法、设计等等。其中 go-zero 和 kratos 是国内开源的,因此都有比较详细的中文文档。

这里推荐一个在线学习的资料:

https://ewanvalentine.io/microservices-in-golang-part-1

手把手实现一个简单的 Go 微服务项目,你可以通过这个项目来学习微服务的相关知识,并且有中文版。


最后,再提醒一下,文中提到的所有书籍,都可以在公众号roseduan写字的地方后台回复相应的关键字获取:【算法、操作系统、网络、数据库、Go、微服务】,按需自取。


题图:from wallheaven.cc

本文分享自微信公众号 - roseduan写字的地方(rose_duan),作者:roseduan

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-06-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Go语言学习路线 - 0.总览

    目前网上已有很多Go相关的教程,包括基础讲解、源码解析、面试技巧等,但我依然下决心来做一个具有强烈个人主观观点色彩的Go语言学习路线:这个系列的目标只有一个 -...

    junedayday
  • 最新Go语言学习路线图 带你通关Go语言-千锋

    在近一年的编程语言的排行榜中,Go语言跻身靠前的位置。Go语言具有入门快、程序库多、运行迅速等特点,开发效率和执行效率都是各大编程语言中的佼佼者。企业对于Go语...

    深圳java培训技术
  • 保姆级NLP学习路线来啦!

    这个保姆级不是形容这份指南有多详细,而是形容这个指南会伴随你们一起成长哟(其实就是太多了写不完)。之后的更新都会定期发文并汇总在Github上,欢迎催更:

    Datawhale
  • 区块链开发语言之go语言学习线路指导

    问题导读 1.为什么学习go语言? 2.你认为该如何入门go语言? 3.你认为go语言需要哪些学习过程?

    用户1410343
  • Go语言学习路线 - 5.基础篇:从一个web项目来谈Go语言的技能点

    经过了 入门篇 的学习,大家已经初步了解Go语言的语法,也能写常见的代码了。接下来,我们就从一个Web项目入手,看看一些常见的技能与知识吧。

    junedayday
  • Go语言学习路线 - 1.方向篇:明确Go语言的成长方向

    目前,后端开发语言的就业方向主要分为两块:业务系统开发 与 基础平台开发 。Go语言自然也不会例外。

    junedayday
  • Go开发者路线图2019,请收下这份指南

    Go是Google开发的一种静态、强类型、编译型、并发型,并具有垃圾回收功能的类C编程语言。2009以开源项目的形式发布,2012年发布1.0稳定版本,距今已经...

    AI科技大本营
  • Go语言学习路线 - 4.入门篇:快速体系化地入门Go语言

    如今互联网资料泛滥,入门编程语言的途径有很多种选择,但如果要我推荐,只有一个建议 - 研读一本该编程语言最优秀的基础书籍。

    junedayday
  • 震惊!2021年数十个技术领域图谱曝光

    答案:当然是能力越高,工资越高呀,你能创造多少价值,你能帮助多少人,你能力当然也就越大。

    孙叫兽
  • C 语言与 C++ 学习路线

    诸如Windows平台VC系列:VC++6.0(比较古老) ;Visual Studio2013, Visual Studio 2015,Visual Stud...

    C语言与CPP编程
  • 适合 Go 新手学习的开源项目——在 GitHub 学编程

    故事要从 2007 年说起。因为受够了 C++ 煎熬的 Google 首席软件工程师 Rob Pike 召集 Robert Griesemer 和 Ken Th...

    HelloGitHub
  • Go语言学习路线 - 8.高级篇:从五个问题来畅想Go工程师的未来发展

    有人常说,编程语言对软件工程师来说并不重要,更重要的是软件工程思想、架构设计能力等更高层面的内容。

    junedayday
  • R语言学习路线图-转帖

    本文分为6个部分,分别介绍初级入门,高级入门,绘图与可视化,计量经济学,时间序列分析,金融等。

    数据饕餮
  • Go 语言学习之 go tool

    在 Go 语言中,为了方便工程师写程序,提供了一些内置命令行工具,例如 fmt 可以格式化代码,统一代码风格;vet 检测代码的常见错误;build 编译代码,...

    frank.
  • Go语言学习路线 - 2.方向篇:如何成为一名优秀的Go语言工程师

    首先,我们来聊聊这个老生常谈的话题 - 掌握基础。关于基础的学习路线我会在后面细讲,今天我们先来谈点别的。

    junedayday
  • go语言学习-mysql

    solate
  • go语言学习-iota

    Go没有枚举类型,可以用常量模拟可以用iota生成从0 开始的自动增长的枚举值。按行递增,可以省略后续行的 iota 关键字.

    solate
  • Golang之旅0—安装、配置和命令

    Go语言的并发是基于 goroutine 的,goroutine 类似于线程,但并非线程。可以将 goroutine 理解为一种虚拟线程。Go 语言运行时会参与...

    皮大大
  • C语言 | #define命令

    其特点是:定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了;预编译又叫预处理,预编译不是编译,而是编译前的处理,这个操作是在正式编译之前由系...

    小林C语言

扫码关注云+社区

领取腾讯云代金券