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工程师##我的求职思考##安利/避雷我的岗位#
CSView校招指南 文章被收录于专栏

从面试准备到面试思想多方面介绍计算机校招,希望带给你不一样的见解。

全部评论
这些公司我要是能进去,我这水平java找不到工作?
11 回复
分享
发布于 2023-03-21 12:06 浙江
GO不要作为主语言,主语言还是要以JAVA或者c加加为主,GO的岗位太少了,且非常卷
6 回复
分享
发布于 2023-03-21 13:06 安徽
联易融
校招火热招聘中
官网直投
go岗位,,少到不敢相信。找了两个月了,没几个公司招人,大厂有少许go岗位,但是筛学历
2 回复
分享
发布于 2023-04-08 10:49 广东
mark一下,暑期来还愿
1 回复
分享
发布于 2023-03-20 09:47 四川
mark一下,可能还愿
1 回复
分享
发布于 2023-03-21 14:53 广东
点赞 回复
分享
发布于 2023-03-20 09:55 上海
go的定位以及适用场景是什么
点赞 回复
分享
发布于 2023-03-22 11:06 浙江
想请问一下楼主go的八股文有java的多吗?还有其理解难度咋样?😂
点赞 回复
分享
发布于 2023-03-22 13:17 北京
建议学c++,go不保险,Java太卷
点赞 回复
分享
发布于 2023-04-08 21:43 湖北
来一起cpp吧,润吧
点赞 回复
分享
发布于 2023-05-03 11:10 广东

相关推荐

投递实习第一面👥 面试题目一面:1. 讲一下为什么要用next2. 具体讲一下接口开发的MVC3. next是怎么进行SSR渲染的4. 讲一下你用到了那些mysql语句5. TS类型有哪些6. TS定义一个对象key为string,value为any(只说了一种)7. 讲一下你怎么配置husky跟commitlint和代码规范8. webpack常见plugin和loader 9. 介绍一下immer为什么要用它10. 讲一下为什么需要不可变数据类型11. immediate是什么12. js的事件循环13. js基础数据类型和引用数据类型有哪些14. 改变this指向有哪些15.事件流16. 你学习前端的方式反问:1. 公司技术栈:大前端、主要是React2. 什么时候有消息:一周内二面:介绍了一下公司情况,问什么时候过去04-15三面:闲聊04-18四面:1. 给自己html,css,js,react 打分  - 为什么css,html打60分  - 为什么js高一点2. js的数据类型  - number 子类型     - NaN    - Infinity  - 基本类型和引用类型的区别     - Object 子类型(其实就是想让你讲讲有哪些特殊对象)     - 数组方法        - push的返回值      - pop的返回值3. 常用hooks  - useEffect不添加依赖数组是怎样的  - 把值从useEffect中放到外面,每次刷新组件同样的变量二者等价吗?4. 讲一下对SSR的理解5. 为什么使用egg和next6. 怎么学前端7. Plugin8. Loader9. 给自己的ts打分10. 讲一讲ts有哪些内置类型(讲了5-7个)11. 实习工作希望获得什么(面试官给意见)---------------------- 口头offer地址成都  工资200/day  不打卡 #面经# #前端实习面试# #前端面经#
点赞 评论 收藏
转发
44 425 评论
分享
牛客网
牛客企业服务