Java学不动了,要不试试转Go?
背景:C9计算机本硕,刚参加完22年秋招,纯Golang选手,斩获多大厂SP offer
00 前言
最近有学弟吐槽Java越学坑越深,自己精力有限,感觉是力不从心,很可能学不完,然后自己开始想转Go,求一份学习路线。我恰好会一点点,但是会的也不多。做这份路线时候我没把一堆资料教程全扔出来,怕就怕最后沦为收藏吃灰的下场,秉持着多不如精的思想,保证学习先掌握精髓,就做了这份学习路线。虽然不多,但是学完了找工作还是不成问题的。
针对具体学什么语言可以看看我这篇分享:
https://www.nowcoder.com/discuss/461190045332992000
事先说明:不用吐槽学了某门语言就找不到工作了,找不到工作的人换语言赛道其实还是找不到工作,因为换语言解决不了问题,更重要的是算法刷题、计算机网络、操作系统、数据结构、计算机组成原理、设计模式这些通用东西,以及自己的核心竞争力。
01 Go的岗位
国内目前很多公司在用Go,如字节、腾讯、百度、阿里云、蚂蚁金服、京东、滴滴、深信服、米哈游等,岗位如下:
- 后端开发:用于开发 Web 服务器、API 服务、微服务、分布式系统等后端应用,原先是字节跳动带起来的,现在越来越多的公司技术上开始向Go迁移了。
- 基础设施开发:基于K8s开发本公司的基础平台,京东、TiDB用Go搭建自己的分布式存储系统,这部分工资还算不错。
- 游戏服务器开发:用Go开发服务器效率很高,性能也不错,这部分主要工作是编写游戏逻辑、网络通信等模块。
- 区块链:区块链需要高度安全性和并发性,用 Go 进行区块链开发很合适。目前许多主流的区块链项目,如 Ethereum、Hyperledger Fabric、Cosmos SDK 等都采用了 Go 作为主要开发语言。
有人担心岗位不够,但是能投的还是挺多的,举个例子最近的米哈游校园招聘:
可以看到很多都要求是Go优先,其他公司也有就不举例子了,职位上不用担心。
02 Go基础
相信大家第一门入门的编程语言一定是C语言,Go被称为21世纪的C语言,同样也有语法简单、性能高效的特点。与C语言对比,Go提供了更友好的并发编程、内存管理、标准库的支持,解决了C的一些不足。如果你有其他高级语言的编程经验,学习Go应该非常容易。
基础阶段一般是1~3周的学习时间,这个阶段主要学习的内容如下:
- 语言基础:包括基本语法、数据类型、变量、常量、运算符、流程控制语句等
- 函数:包括函数的定义和参数传递、匿名函数等
- 数组、切片和map:包括数组、切片和map的定义、初始化、添加、删除操作
- 结构体和指针:包括定义、访问、操作
- 接口和类型断言:包括接口定义、类型断言操作
- 并发编程:包括goroutine、channel、锁等
- 文件和网络编程:包括文件和网络编程的基本概念和实现方式
文档学习和视频学习根据自己习惯选一种方式即可,下面是我看过的一些比较优质的教程。
文档类
【官方教程 A Tour of Go】
网址:https://go.dev/tour/welcome/1
【GoGuide】
网址:https://github.com/coderit666/GoGuide
视频类
【七米老师】
视频地址:https://www.bilibili.com/video/BV1Jt411T7nE/
博客地址:https://www.liwenzhou.com/
【IT营】
视频地址:https://www.bilibili.com/video/BV1XY4y1t76G
03 GoWeb+数据库
Web基础和数据库高度相关就放一起了,学习Web主要掌握路由、中间件、参数绑定、渲染模板等功能;学习数据库主要学习Go如何使用SQL对数据库进行数据存储,以及ORM框架如GORM的使用。
Web
目前比较流行的GoWeb框架有Gin、Echo、Beego、Iris等,这边推荐学Gin就可以了。
【Gin框架】
主要是阅读Gin框架的文档和示例代码,了解gin的API和特性,例如路由、中间件、JSON解析等。
官方文档:https://gin-gonic.com/zh-cn/docs/
视频教程:https://www.bilibili.com/video/BV1XY4y1t76G?p=51
数据库
这阶段是以数据库为基础开始学习的。在你学过数据库了解操作,再来学习如何用Go操作数据库。不要本末倒置。
【sqlx】
sqlx是一个基于Go语言的第三方库,它提供了一组扩展了标准库database/sql的功能。性能敏感的喜欢裸写sql,用sqlx。
网址:https://github.com/jmoiron/sqlx
【GORM】
GORM提供了一种简单的方法来处理关系型数据库操作。ORM代表对象关系映射,允许将对象模型映射到关系型数据库模型中,从而简化数据访问。
网址:https://gorm.io/
视频教程:https://www.bilibili.com/video/BV1U7411V78R
【Redis】
这里的学习主要是熟悉API操作,没什么原理和技巧性内容。所以请先去Redis之后再来动手实践。
网址:https://redis.uptrace.dev/zh/
04 Go进阶
源码
阅读Go的源代码是理解Go语言的关键步骤。可以从标准库开始,逐渐深入了解Go的内部工作原理。学习过程中重点查看一些Go的实现细节和设计决策,如Go的内存模型、调度器、垃圾回收等。
【官方标准库】
网址:https://pkg.go.dev/std
【煎鱼的博客】
覆盖 Go 语言从编译到运行的方方面面,让你对 Go 语言有更加整体和深刻的认识。
网址:https://draveness.me/golang/
Ggo
【Go语言高级编程】
了解如何在Go代码中调用C语言的函数和访问C语言的数据类型。
网址:https://chai2010.cn/advanced-go-programming-book/
Test
很多人不喜欢或者不会写软件的测试,但是写好测试可以解决开发过程中的大部分问题。
【Learn Go with tests】
通过编写测试驱动的代码来了解Go语言的基础知识,项目覆盖了基本语法、数据类型、函数、指针、错误处理、并发编程等测试方面的内容。
网址:https://studygolang.gitbook.io/learn-go-with-tests/
【gomock】
Go语言的一个Mock框架,用于在单元测试中模拟和替换依赖项的行为,大厂比较常用的Golang测试库。
网址:https://github.com/golang/mock
设计模式
学习设计模式可以解决复杂的软件设计问题,提高代码的可重用性、可维护性和可扩展性,属于编程的内功。如果没学过设计模式正好通过【Go设计模式24】一同学习了。
【Go设计模式24】
网址:https://lailin.xyz/post/go-design-pattern.html
05 云原生和微服务
云原生
Docker和K8s太出名就不多介绍了,视频教程我看了不少,推荐一下认为讲的比较好的视频教程,想深入学习还是得自己补充很多东西。
【Docker】
官网:https://www.docker.com/
视频教程:https://www.bilibili.com/video/BV1og4y1q7M4/
【K8s】
官网:https://kubernetes.io/zh-cn/docs/home/
视频教程:https://www.bilibili.com/video/BV1Qv41167ck
微服务
gRPC、Istio和micro都是基于云原生架构的微服务框架,都支持使用微服务架构构建云原生应用程序。学一个掌握思想就可以了。
【gRPC】
Google开发的开源RPC框架,使用Protocol Buffer作为默认的消息序列化机制。
网址:https://grpc.io/
【Istio】
Istio是一个开源的服务网格平台,提供了流量管理、安全、监控和跟踪等功能。
网址:https://github.com/micro/micro
【micro】
一个轻量级的微服务框架,提供了基于Go语言的微服务运行时和一组基本服务,如服务发现、负载均衡和配置管理等。
网址:https://github.com/go-micro/go-micro
06 实战
这部分主要是造轮子,帮你更好地掌握开发的细节实现和架构设计,加深动手实践能力。
【go-admin】
基于Golang和Vue的后台管理系统框架,支持MySQL、PostgreSQL等多种数据库,包括文件上传、验证码、邮件发送、权限验证等功能,可以自己尝试造一遍。
【七天实现Web框架】
网址:https://geektutu.com/post/gee.html
- 第一天:前置知识(http.Handler接口)
- 第二天:上下文设计(Context)
- 第三天:Trie树路由(Router)
- 第四天:分组控制(Group)
- 第五天:中间件(Middleware)
- 第六天:HTML模板(Template)
- 第七天:错误恢复(Panic Recover)
【7天实现分布式缓存】
网址:https://geektutu.com/post/geecache.html
- 第一天:LRU 缓存淘汰策略
- 第二天:单机并发缓存
- 第三天:HTTP 服务端
- 第四天:一致性哈希(Hash)
- 第五天:分布式节点
- 第六天:防止缓存击穿
- 第七天:使用 Protobuf 通信
【七天实现ORM】
网址:https://geektutu.com/post/geeorm.html
- 第一天:database/sql 基础
- 第二天:对象表结构映射
- 第三天:记录新增和查询
- 第四天:链式操作与更新删除
- 第五天:实现钩子(Hooks)
- 第六天:支持事务(Transaction)
- 第七天:数据库迁移(Migrate)
【七天实现RPC】
网址:https://geektutu.com/post/geerpc.html
- 第一天:服务端与消息编码
- 第二天:支持并发与异步的客户端
- 第三天:服务注册(service register)
- 第四天:超时处理(timeout)
- 第五天:支持HTTP协议
- 第六天:负载均衡(load balance)
- 第七天:服务发现与注册中心(registry)
07 面试
进程、线程、协程的区别?
goroutine相比线程的优势?
go与Java的区别?
go语言中是如何实现继承的?
for遍历多次执行goroutine会存在什么问题?
init函数是什么时候执行的?
slice的扩容机制?
slice是线程安全的吗?
slice之间怎么进行比较?
map之间如何进行比较?
map如何实现顺序读取?
map的底层数据结构?
bucket是如何工作的?
map的查找过程?
如何实现一个线程安全的map?
channel的概念?
channel有哪些状态?
如何判断channel已经关闭?
channel的底层实现原理?
channel发送数据和接收数据的过程?
channel是否线程安全的?
channel如何实现线程安全的?
channel的应用场景?
select的用途?
defer的概述?
defer的使用场景?
defer函数和return的执行顺序?
GMP模型?
GMP的调度流程?
goroutine什么时候会被挂起?
golang的垃圾回收?
垃圾回收的触发条件?
#golang##学习路线##golang工程师##我的求职思考##安利/避雷我的岗位#从面试准备到面试思想多方面介绍计算机校招,希望带给你不一样的见解。