可能是最用心的「Go学习建议」
前言
最近群里又加入了不少好友,和我聊的最多的问题就是“如何高效学Go?要学什么?怎么学好?”。
我觉得这个问题要看每个人的目标是什么?
是想快速学习之后找到一份工作就可以?还是本来有其他语言的基础,想通过学Go提高自己,进而找到一份更好的工作。
同样也要结合自己的过往经历,比如你是在校生,还是刚工作不久的朋友,还是混迹职场多年朋友。
或者你是运维转Go,还是Java转Go,PHP或者Python转Go等等。
我都是在充分了解大家过往的经历后,给每位星友提建议的。
聊得人多了也就有了能“抽象”出来的东西,整理一篇文章,分享给大家。
我之前给大家分享的《Go学习路线图》https://juejin.cn/post/7119123646471208968,是结合我的经历,适合于有一定基础,想快速学习Go,尽快找到工作的朋友。
如果你有充足的时间去学习(或者你想谋求一个更好的工作),建议大家按照这篇文章的顺序,夯实自己的基础,多做项目,进而实现自己的目标。
1. Go语言基础
图书
入门看这个:《Go语言学习笔记》,跟着书籍多敲敲代码,Go语言相对C++,Java来说,简单很多。
视频
入门阶段我非常推荐这套免费教程:
不管是内容,还是讲解方式,还是深入浅出的讲解风格都深得我心,也是我学习的榜样。
这是UP主的视频地址:
https://www.bilibili.com/video/BV1s341147US
网站资源
1. 菜鸟教程
- 网址:https://www.runoob.com/go/go-tutorial.html
- 简介:如果你觉得看视频很浪费时间,强烈建议你跟着菜鸟教程动手实践。
2. go语言中文网
- 网址:https://studygolang.com/articles
- 简介:这个就不多说了,学Go的应该都知道
3. Go By Example 中文版
- 网址:https://gobyexample-cn.github.io
- 简介:使用代码示例来学习 Go 语言。
4. Go 面试题
- 网址:http://www.topgoer.cn/docs/gomianshiti/mianshiti,
- 简介:也是使用代码示例来讲解 Go,非常适合用来准备面试。
5. 跟着单元测试学习 Go
- 网址:https://github.com/quii/learn-go-with-tests
- 简介:非常见名知意了,也有中文版的哦~
Go轻量级开源项目
学完基础,建议你上手几个基础项目:
1. starcharts
- GitHub:https://github.com/caarlos0/starcharts
- 简介:项目的功能是生成 Github 上面的项目的 star 趋势图,核心代码不多,用来练手很合适。
2. gorched
- GitHub:https://github.com/zladovan/gorched
- 简介:使用 Go 写的一个小游戏。
3. pacgo
- GitHub:https://github.com/danicat/pacgo
- 简介:也是使用 Go 写的一个小游戏,每一步都有详细的描述和代码实现。
4. wechat-go
- GitHub:https://github.com/songtianyi/wechat-go
- 简介:微信 web 版 API 的 Go 实现,模拟微信网页版的登录/联系人/消息收发等功能。
我准备脱敏之前用Go开发的类似支付宝集五福项目,开源出来,欢迎大家催更。
2. Web 开发
书籍
基础知识掌握之后,可以上手做一些 web 应用,进一步了解更多的 Go 语言相关框架以及生产环境中的常用中间件,推荐书籍《Go Web 编程》。
框架
了解了web基础知识后可以学习下 web 框架 Gin、GoFrame:两个框架都比较的流行,选择其中一个其实就可以了。
GoFrame相关
- 官方文档:https://goframe.org/pages/viewpage.action?pageId=1114119
- 掘金GoFrame学习专栏:https://juejin.cn/column/7146133427706658847
Gin相关
- geektutu Gin 简明教程:https://geektutu.com/post/quick-go-gin.html
- Gorm指南:https://gorm.io/zh_CN/docs/index.html
关于学习框架这件事,都首先推荐看官方文档。不用去找其他的书籍,没有比官方文档更有价值的资料了。
Go web项目
推荐几个使用 Go 构建的基础 web 项目:
1.gin-vue-admin
- GitHub:https://github.com/flipped-aurora/gin-vue-admin
- 简介:使用 Gin 框架构建的后台管理系统。
2.ferry
- GitHub:https://github.com/lanyulei/ferry
- 简介:基于 Gin + Vue + Element UI 前后端分离的工单系统。
3. go-admin
- GitHub:https://github.com/go-admin-team/go-admin
- 简介:Gin + Vue + Element UI 的前后端分离权限管理系统。
我的经验
对于 web 项目的学习,有些朋友觉得很复杂,有畏难心理,不知道怎么下手。
我的建议是:多动手,可以在本地把项目跑起来,不要胡子眼睛一把抓,先去搞懂一个接口的请求响应流程,其他的大同小异。
编程是实践科学,要有工匠精神,不要畏难畏烦,动手实践才是王道。
这里推荐一下我的视频教程:用敏捷开发和“抄作业”的思想,快速上手Go实战项目
视频地址:https://www.bilibili.com/video/BV1bt4y1K7Lj/
3. Go 语言进阶
书籍
基础知识掌握后需要了解一下Go的底层原理和高级用法啦(面试造火箭必备)
这里推荐书籍《Go 程序设计语言》(号称 Go 圣经)、《Go 语言高级编程》、《Go并发编程实战》。
网站资源
1.《Go 语言圣经》
- 地址:https://books.studygolang.com/gopl-zh/
- 简介:go圣经是值得反复阅读的
2.《Go 语言高级编程》
- 地址:https://chai2010.cn/advanced-go-programming-book - 简介:Go语言专家曹大的书,深入到了Go的汇编和很多高级用法
3.《Go专家编程》
- 地址:https://books.studygolang.com/GoExpertProgramming/
- 简介:理解Go中常见数据结构的底层,建议大家重点去看Channel,Mutex,Map
4.《Go语言设计与实现》
- 地址:https://draveness.me/golang/
- 简介:了解go的编译机制,goroutine调度机制,垃圾回收机制
- PS:某否技术平台最近送了我这本书,正在拜读中,看了前几篇,已经被作者的严谨折服了。
我的经验
因为工作太忙的原因,已经很长时间没有看纸质书了,只是根据自己的需求去查官方文档,查免费教程。
当我最近阅读了一段时间纸质书之后,发现读书的体验真的很好,读进去就不会浮躁,理解问题可以深入好多。
所以这篇文章都是先给大家推荐书籍、再推荐学习网站、再推荐项目。
进阶Go项目
想要进一步巩固所学知识,这里推荐几个比较进阶的项目
1. goframe-shop-v2
- GitHub:https://github.com/wangzhongyang007/goframe-shop-v2
- 简介:这是基于goframe框架最新版开发的电商实战项目,做业务开发的同学可以看下
2. 7DaysGolang
- GitHub:https://github.com/geektutu/7days-golang
- 简介:这是星球里不少星友推荐的项目:7 天使用 Go 从零实现 web 框架、分布式缓存、ORM 框架、RPC 框架,代码量不多,但是质量挺不错
3. godis
- GitHub:https://github.com/hdt3213/godis
- 简介:用golang实现一个redis服务器
gochat
- GitHub:https://github.com/LockGit/gochat
- 简介:一个 Go 语言实现的轻量级 im 系统,对网络方面熟悉或者感兴趣的可以看看。
4. Go微服务云原生
目前 Go 在微服务中的应用非常广泛,微服务云原生是一个太庞大的话题,你不可能把每一个核心的问题都能够搞清楚。
或许只能在公司的具体的微服务生产环境中,才能够对相关的概念有更加深刻的体会,闭门造车是学不会微服务云原生的。
正如前段时间帮知识星球中大三星友答疑一样,老师留的毕设是Go微服务云原生相关,他不知道从何学起。
我们给的建议是:首先要明确是基于云原生体系做应用开发,还是做云原生的基础建设,然后有针对性的去学习,感兴趣的朋友可以加入星球查看我们的总结。
框架
推荐 Go 语言的微服务框架 GoKit、GoMicro、go-zero、kratos,可以随便选择一个,理解其基本的用法、设计等等。
其中 go-zero 和 kratos 是国内开源的,因此都有比较详细的中文文档。
我个人建议学习go-zero,跟着快速上手和简单例子写一遍,不仅可以熟悉CRUD,还能了解Go中优秀的框架设计思想,微服务确实是未来的趋势
- GitHub地址:https://github.com/zeromicro/go-zero
- 官方地址:https://go-zero.dev/cn/
5.面向就业编程
如果你上面都掌握的不错了,就可以着手准备找一份「好工作」了。
如果需要简历优化和求职指导可以微信私信我。
尽快找到工作
如果你想尽快找到工作,对薪资和企业规模要求没有那么高,基本掌握下面这些就可以去约面试了:
- Go语言基础 : 了解golang的基本语法和语言特性
- 算法题 :用golang来练习写算法题,熟练掌握golang的基本语法和常用库函数,同时刷好算法题也是进入中大厂的必要条件,力扣、牛客都可以去刷一刷
- web相关:《Go Web编程》看了,深入理解golang如何处理request,标准库中的包如何应对各种常见的web场景;Gin和Goframe两个web框架二选一即可,去做一个实战项目
- 基础知识:网络,操作系统Linux,数据库MySQL、pgsql,缓存redis、mongoDb 面试的重中之重,一定要看,理解着去背知识点。
- Go底层原理:面试造火箭必备,具体看上面Go语言进阶部分。面试重点:map,slice,channel底层实现原理,goroutine调度,GMP模型,内存分配,垃圾回收,逃逸分析等
- web项目 :至少选择一个web项目作为自己的项目(见上面web项目推荐),项目需要用到数据库,和至少一种中间件(如redis,消息队列等)
找到好工作
上面提到的这些,我认为能实现「尽快找到工作」的目标。
但是要实现找到好工作的目标,除了技术本身,还需要结合你过往的经历,把你过往的经历转化成自己的优势、做更多的商业项目、有针对性的准备意向公司面试等等。
相关文章
- 数说,世界杯让你印象最深刻的面孔
- 记一次docker虚拟机横向移动渗透测试
- 华为秋招面经分享!
- 面试官:如何保证接口幂等性?一口气说了12种方法!
- 网易秋招高频面试题汇总
- 《前端图形学实战》几何学在前端边界计算中的应用和原理分析
- 前端图形学实战: 从零实现编辑器的图层管理面板和实时缩略图(vue3 + vite版)
- 结构建模设计——Solidworks软件之装配体操作基本总结一(装配体功能界面简介、插入零件操作、基本配合操作)
- 程序员如何准备好一次面试
- 面试问到DCL失效不知所措
- Kafka大厂高频面试题:在保证高性能、高吞吐的同时保证高可用性
- 域渗透-横向移动命令总结
- PHP程序员面试时经常会被考的冒泡排序算法
- Spring框架学习笔记(2)——面向切面编程AOP
- Jsp学习笔记(2)——页面导航、表单、EL表达式
- ArcGIS QGIS学习二:图层如何只显示需要的部分几何面数据(附最新坐标边界下载全国省市区县乡镇)
- 新开源HTML5单文件网页版ACME客户端,可在线申请Let's Encrypt、ZeroSSL免费HTTPS多域名通配符泛域名SSL/TLS证书(RSA/ECC/ECDSA)
- Java开发桌面程序学习(13)——Javafx多线程 下载功能
- 移动端实现HTML5 mp3录音踩坑指南:系统播放音量变小、一些机型录音断断续续 之 MediaRecorder和AudioWorklet的终极对决
- 最新全国省市区县乡镇街道行政区划数据提取(2022年)