我目前在字节跳动做 Go 开发,说说我学习 Go 的经历吧。
一、学习 Go 的建议
如果你是一个 Go 新人,建议先系统地把 Go 的常用语法特性和内置库先过一遍,推荐《Go 程序设计语言》,或者看看许式伟老师的《Go 语言编程》(链接来自网络,喜欢的请购买正版哦)。
《Go 程序设计语言》
链接:https://pan.baidu.com/s/1m_JPCJn1k_b3kjpS7HtW0g 提取码:nid4《Go 语言编程》
链接:https://pan.baidu.com/s/1NWoGpZ_MVzKHEJtVdz4IuA 提取码:wu7v
当你有一定基础之后,可以看看雨痕大佬的《Go 语言学习笔记》和 《Go 专家编程》进行查漏补缺和提升。
《Go 语言学习笔记》
链接:https://pan.baidu.com/s/1FXdjZfjY3LdrL57plcMi0Q 提取码:fw93《Go 专家编程》
链接:https://pan.baidu.com/s/1_AH1VwP0HCQuoBqS5mY6fQ 提取码:2lep
Go 的并发模型相比较其他语言或者操作系统支持的并发原语要简单需要,基本就是 goroutine 和 channel 的结合使用,这块对于高性能高并发 Go 服务是常用的技术点,推荐阅读《Go 并发编程实战》一书:
《Go 并发编程实战》
链接:https://pan.baidu.com/s/1bekXSdFJsMHUKykVjq7fnQ 提取码:p4ex
国外有一本《Distributed Computing with Go》(Go 分布式计算)。
网上有同学分享出来相关电子书:
链接: https://pan.baidu.com/s/1hLm2Re6LNJdeNEyq1_vTUg 密码: thgs
在学习或者编写了一些 Go 项目之后,我建议你研究一下 Go 的源码,这里推荐郑建勋老师的《Go语言底层原理剖析》,这本书关于 Go 并发章节的实现原理代码剖析写的尤为精彩,我是在一个深夜一口气读完的。
二、推荐一些不错的开源 Go 项目
掌握 Go 基本语法之后,可以研究学习一些开源项目,假以时日,一定能拥有不错的 Go 水平了。阅读一些优秀开源 Go 项目,不仅能让你在面试时就项目经验侃侃而谈赢得面试官青睐,而且可以大幅度提高自己的综合技术水平。
1、高性能 Web Server——Gin
https://github.com/gin-gonic/gin
2、Go 数据库操作层——Gorm
https://github.com/go-gorm/gorm
这是目前国内 Go 语言编写操作数据库使用做的 Go 语言版本 ORM。
3、tinode
这是一个开源的即时通讯软件,既然是即时通讯软件,学习的时候基本上无任何业务负担,可以专注地学习程序逻辑本身。
服务端代码(使用 Go 开发)地址:
tinode/chat
搭建出来的服务部分截图:
4、斗鱼直播的朱庇特
项目官网:Jupiter
项目源码地址:douyu/jupiter
我通过这个项目,学习到了如下技能点:
- HTTP 请求解析
- 支持 RPC 请求、RPC 实现
- 服务注册与发现
- 长短任务设计
- 负载均衡
- 指标采集/链路追踪/日志埋点
- 慢响应拦截
- 熔断限流
- 接入各种消息中间件(如 Kafka、RocketMQ 等)
- 接入各种缓存服务(如 Redis)
- 其他功能
三、光学 Go 还不够
如果你想成为一个 Go 高手,光学习 Go 是远远不够的。很多同学找不到 go 方面的工作,并不是因为 Go 本身学的不好,而是其他技能点不够强。这些技能点包括哪些呢?
如果你是应届生或者工作年限不长,算法和数据结构是必考内容。
大多数技术岗面试的算法题其实不难,我整理了一些常问的算法题:
链接: https://pan.baidu.com/s/1uCjjPvxJ61ucpl4pivS7pw提取码: ks6t
大多数算法题都是《剑指 offer》这本书上的原题,建议相关的社招同学可以在面试字节前翻一翻这本书上的算法题,保持对一些常见算法题的敏感度。
网上有人分享了这本书(喜欢的同学请购买正版哦):
链接: https://pan.baidu.com/s/1i9H6fbPg1tVYUHxf_qOOqw 提取码: tfbq
除了算法和数据结构的知识,其他的就需要自己的积累了,如操作系统、计算机网络、数据库、分布式等知识。
最后,再次说一下,我们常年大量招人,如果你也想来字节做 Go 开发, 我可以帮你内推,内推链接:
https://job.toutiao.com/s/MsK6h49
原创不易,有帮助的请点赞和关注 @张小方 ~