前言
下面是Go学习路线思维导图,我将整个roadmap
分成了七个部分,由浅入深分别是:语法、日常开发、web、分布式、其他组件、项目、就业进阶。
Go语法
和其他语言一样,Go
也需要从基础开始,它的关键字比起其他语言的关键字少很多,一共只有23个。在接触完变量声明、流程控制、循环控制、各类数据容器之后就掌握了Go
语言的基础。
之后可以从函数、方法、结构体开始深入学习,在接触标准库之后进行并发编程和网络编程的学习,尤其是并发编程需要深入理解与学习,因为Go
本身就以并发方便著称,只需要一个go
关键字就能开启一个goroutine
。再学习Go
的包管理以及测试相关的内容作为补充,整个学习路线就算是完成了。
就业还需要学习Go
底层相关的内容,比如常问的各类包:反射、unsafe
、sync
、锁、slice
、map
、waitgroup
、channel
、context
、gc
、内存分配等等内容,一定要深入底层,深入源码级别的学习。
日常开发工具
- Linux常用命令:因为后台开发人员通常都是使用的Linux服务器,所以常见命令必须得熟悉,学有余力的话还可以了解一下Linux的设计与实现,比如Linux中的进程线程调度、内存管理等等。
- Git:分布式代码管理工具,多人协作开发通常都会使用到Git。
- Markdown:一种简单明了的文本编辑语法,通常我们可以使用简单的工具例如
Typora
、语雀来编写Markdown
文档。 - 环境:一个方便的
Go
开发环境,推荐Goland
。
Web
首先要了解HTTP
协议相关内容,比如几种HTTP
请求类型,RESTFUL API
风格、HTTP Header
、HTTP Body
相关内容。然后通过原生的net/http
编写简单的服务端代码。
完成以上步骤之后可以学习用途比较广泛的web
框架:gin
或者hertz
,以及常用的orm
框架:gorm
,其他的常见第三方库可以按需学习,例如日志库zap
,配置文件库viper
等等。
分布式与微服务
Go
语言以并发简单著称,所以面试中问及分布式的概率会比其他语言更多一点。入门分布式首先推荐了解一些分布式理论,如:CAP
理论,PACELC
理论,NWR
理论,多数派理论等等,在了解完基础理论之后阅读Raft
算法论文以及Gossip
协议等分布式一致性算法,除此之外还可以学习MIT 6.824
课程,这也是入门分布式最经典的课程之一。
分布式领域内容非常繁多,如分布式事务,RPC
,分布式组件等等。推荐大家先从原生的net/rpc
入手,了解什么样的方法才是Go
语言中的一个合规的RPC
处理方法。然后继续学习gRPC
协议以及protobuf
数据格式、以及Go的微服务库go-zero
、go-micro
等,相比之下go-zero
使用的更多一点,它也不仅仅是一个微服务库,更像是一个工具库,内容庞大,功能繁多。
各类组件
存储
关系型数据库和非关系型数据库都必须了解,其中最具代表性的当属Mysql
和Redis
,除此之外,根据需要还可以选学其他的数据库,如搜索数据库ES
、文档型数据库MongoDB
等等。
MQ
当前市面上也有着各种各样的MQ,用的最多的应该是Kafka
,同时Pulsar
作为新一代云原生消息队列,也具备自己的优势,例如数据冷热存储,死信队列等等机制。NSQ
是一个由Go
语言开发的轻量级消息队列,有需要的同学也可以进行学习。具体情况按需学习。
云原生组件
Docker
:容器领域龙头,提到容器我们第一时间都会想到Docker
。
Prometheus
:监控领域龙头,性能非常强大,能够支持各类常用指标以及自定义指标,通常配合Grafana
看板进行使用,方便查看项目状态。
Kubernetes
:容器编排领域龙头,用于管理成千上万的容器实例。
最关键的是这些云原生组件都是使用Go
语言编写,Gopher
能很轻松的看懂这些组件的源码,这也是Go
语言被称为新时代云原生语言的原因,几乎所有的CNCF
(云原生基金会)的项目都是由Go进行开发的。
项目
在校生推荐简历上放三个项目,web
、分布式微服务、轮子。
其中微服务项目可以是重构自己的web
项目,然后加上上述提到的组件,比如MQ
、Docker
、Prometheus
等等,成为一个比较有竞争力的项目。
这部分之后我会在掘金同步自己最近做的项目,并且之后会使用微服务进行重构+接入Docker
、Promtheus
、Kubernetes
等等,想要跟做的朋友欢迎关注,每周大概两到三次更新。
项目预览
项目概述
本任务管理应用的目标是实现一个简单计划表(todo-list),使用户能够有效地管理他们的任务。
通过采用前后端分离进行开发,后端使用Gin+Gorm+MySQL的方式实现,前端通过Vue进行实现。
项目的主要面向对象是Go初学者以及其他语言转Go的开发者,以及想要往全栈发展的小伙伴们。
后续会使用微服务重构该项目,并加上Prometheus、Kubernetes等常见云原生组件,成为一个竞争力满满,可以写进简历里的项目,敬请期待,欢迎点击关注。
功能描述
-
- 注册:用户可以通过提供必要的信息进行注册。
- 登录:注册用户可以使用他们的凭据登录系统。
- 编辑个人信息:用户可以在系统中更新和编辑他们的个人信息。
- 注销账户:用户可以选择注销账户,删除相关数据。
-
- 添加新任务:用户可以创建新的任务并指定相关信息。
- 查看任务详情:用户能够查看任务的详细信息,包括创建时间、截止日期、状态等。
- 编辑任务信息:已创建的任务可以被编辑,用户可以修改任务的所有信息。
- 删除任务:用户有权限删除任务,以便及时清理不再需要的任务。
- 嵌套任务:每个任务可以有自己的子任务,子任务下又可以有更小的子任务
-
- 任务排序:用户可以根据时间和任务优先级对任务进行排序,以便更好地管理任务列表。
- 任务分组:用户可以选择按照时间或标签等维度对任务进行分组,提高任务的组织性和可读性。
-
- 集成MarkDown编辑器:为任务详情提供MarkDown编辑器,使用户能够以更富有表现力的方式描述任务。
技术栈
-
- Go语言:提供高性能、简洁的后端开发语言。
- Gin框架:轻量级Web框架,适用于构建快速的API。
- Zap:高性能的日志库,用于记录系统运行时的事件。
- Viper:用于读取配置文件,方便灵活地管理应用配置。
- MySQL:作为后端数据库,持久化存储用户和任务信息。
- Docker:进行虚拟化部署,简化项目的部署和环境管理。
- Prometheus+Granafa:进行项目的指标监控,配置看板方便观察。
- Kubernetes:部署在Kubernetes上,通过HPA来提供高可用性。
- Markdown编辑器:集成MarkDown编辑器,提供良好的任务描述体验。
- Vue:构建前端用户界面。
学习收获
通过参与这个项目,学习者将获得以下技能和经验
- Go语言的后端开发经验,包括API构建、认证和数据库集成。
- 使用Vue构建灵活、响应迅速的前端应用。
- Docker、Prometheus、Kuberentes相关知识,熟悉对应的云原生组件开发。
- 配置管理和日志记录的实践经验,提高对生产环境的应用监控和维护能力。
这个项目将帮助学习者全面掌握前后端开发的基础知识,并为实际应用提供了一个完整的综合项目经验。
就业进阶
上述内容都是偏向工程、开发与实战的,即干活能力;但是就业不止要求这些能力,对底层知识的了解(八股文)也有要求。
数据结构与算法
算法在面试中的比例也在逐年提高,现在面试如果做不出算法,除非是表现的非常优秀,不然都是直接挂。这里推荐首先了解一下常见的数据结构,然后手动实现一遍,之后刷常见题库就行了,推荐力扣 hot 100
和codeTop
。
计算机基础
四大金刚:计组、计网、数据结构、操作系统。这些里面的知识最好是自己先学一遍,有自己的理解,在面试之前再刷一遍面试题,问题就不会很大。不推荐背八股,这样无法和其他候选人区分开,一定要有自己的理解。
其他底层
简历中写到的组件的底层都得了解,比如简历上有MySQL
、Redis
、Pulsar
相关内容,那么这些组件的特性、底层实现都要进行了解,如果只知道皮毛不如不写到简历上。
结语
本文向大家介绍了Go
语言学习路线与就业准备,后面会持续分享项目相关内容,感兴趣的朋友欢迎点赞、评论、收藏、订阅,您的支持就是我最大的动力。