Go 服务开发高手课
徐逸
头部大厂资深 Go 技术专家、前腾讯资深工程师
92 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已更新 2 讲/共 28 讲
开篇词 (1讲)
第一章 高性能实践 (1讲)
Go 服务开发高手课
15
15
1.0x
00:00/08:55
登录|注册

开篇词|如何成为Go服务开发高手?

讲述:机器人大小:1.53M时长:08:55
你好,我是徐逸,欢迎来到我的 Go 服务开发高手课。
先简单做个自我介绍。我一直在大厂使用 Go 做开发工作。先前负责过腾讯云网络自动化平台、腾讯少儿教育 App 开心鼠的产品研发。目前,我在另一个大厂负责亿级 DAU 产品的后端研发工作,通过高并发设计、性能优化和稳定性建设,支撑了部分场景千万 DAU、百万 QPS 访问。
近些年来,我留意到很多公司和团队开始使用 Go 进行项目开发或是积极转向 Go。其中既包括腾讯、阿里、字节这样的大厂,也不乏一些快速发展的新兴赛道(比如 Web 3 领域)以及创业公司。
从公司的视角很好理解,选择 Go 就是因为它的超高性价比,在确保功能与性能能够满足业务诉求的前提下,尽可能降低所投入的时间以及人力成本。
相应地,求职市场上 Go 相关岗位的待遇也比较可观,尤其是高级的 Go 开发者、专家。而想要应聘或者晋升到这个 level,就必须要深入了解 Go 语言技术原理,具备高并发、可扩展、高可用方面的实践经验。

Go 服务开发面临哪些挑战?

虽然 Go 语言容易上手,但在实践中想真正用 Go 做好服务开发并不容易。随着公司业务发展,Go 项目的复杂度也越来越高,研发除了完成各种产品功能需求外,还要应对技术需求的挑战。
就我的亲身经验和观察来看,最常见但也最有挑战性的需求是以下几类:
首先就是性能需求,这是支撑我们产品或服务发展的核心基础。除了堆机器,我们还需要掌握提升服务吞吐、优化性能的可行方案。
其次是可维护需求,这是我们保证乃至提升工程效率的强大保障。这需要我们掌握项目拆分、目录结构和代码设计的相关技巧。
最后还有稳定性需求,为了把故障消灭在萌芽里,服务的稳定可靠也十分重要。为了保障服务的稳定性,我们需要掌握常见保障服务稳定性的 Go 编码技巧和架构、流程手段。
可以说应对上面这些需求,既是我们 Go 开发者的必修课,也是区分初级 Go 开发和中高级 Go 开发的分水岭。

成为 Go 服务开发高手难在哪?

不过比起单纯掌握 Go 语言来说,想要掌握这些技能并不容易。
根据我的观察,很多人都挣扎在一知半解的状态,要么对原理一知半解,要么是编码、架构和流程方面的技能不扎实,或者虽然有相关知识的储备,但就是不会用。
比如性能优化方面,虽然知道一些用协程做并发处理的技巧,但并不清楚原理。这样一来,遇到延时问题,就可能会盲目地增加协程数量,结果反而导致系统资源过度消耗,性能下降,而又无法从原理层面去分析和解决。
还有些同学,对 Go 语言原理很熟悉,但是当真正碰到性能任务时,却不知道该如何快速定位性能瓶颈。而且,知道了瓶颈,除了语言编码方面,也不知道该怎么从框架和架构层面做优化。
再比如系统可维护方面,很多人虽然会注意命名规范,但是项目的目录结构却非常混乱,不注意按职责分层,这直接升高了理解和修改的成本。
我还留意到,有一些人虽然学习过设计模式方面的知识,但在实际的项目实践当中,却并不清楚应当如何去运用这些设计模式。
就拿常见的情况来说,在代码中时常会出现很长一串 if-else 语句块来处理不同的情况。但实际上,其中有不少场景是可以借助策略模式来解决的,可我们要么压根就没有想到能够运用策略模式来处理,要么甚至都没有意识到,自己所编写的代码在本质上其实已经趋近于使用了策略模式,只是没有以一种规范、清晰的策略模式结构来呈现。
同样,在服务稳定性方面,很多朋友也存在知识盲区。比如说虽然知道灰度发布,但没掌握灰度发布过程要点,最后导致大批量线上用户下不了单,造成事故。在架构上,有些人也不知道该怎么保障线上服务的稳定性。比如偶尔有突发流量,服务直接被打爆,不知道提前限流。或者是下游有问题,不知道该怎么降级,也不知道怎么防护自身,导致核心业务场景受损。
说了这么多,其实我们和高手的差距无非是这三个层面:
Know What(是什么):性能、可维护性、稳定性方面的知识和技能缺失。
Know How(怎么做):掌握了一定的知识和技能,但不知道该如何用到实处。
Know Why(为什么):虽然积累了一定的技巧和解决方案,但并没掌握底层原理,情况稍一复杂就无法灵活应对。

我们课程是如何设计的?

我始终认为,任何技术都是为了解决问题而存在的,所以我结合自己工作中的实践、思考和总结写下了这门课程,目的是让你能够独立应对并高效解决生产实践里的技术难题,成为 Go 服务开发领域的高手。
为了实现这一目标,大部分课程我们都会先还原生产实践场景里的痛点问题,然后一步步分析和动手实现,剖析相关原理,最终让你真正融会贯通。
比如说学习高性能数据的处理技巧(第四节课),我们就会从一段有性能问题的代码开始,带你用火焰图和 Benchmark 工具去做性能优化,在这个过程中,逐步学习 Go 语言底层是如何实现的,为什么这些处理技巧可以提升性能。
在比如讲如何组织项目目录结构(第十六节课),我们也不是上来就直接介绍一个清晰的项目目录结构,而是会从一个维护复杂的大文件开始,带你逐步重构成分层目录结构,让你知道目录的每一层是怎么来的,为什么要分层。
再说说这门课程的整体规划,一共分为 3 章。
第一章:高性能实践
高并发场景下对性能有着极致要求,需要从多个关键方面进行优化。这个部分我们学习服务性能优化流程、性能优化工具、高性能编码和架构技巧等,让你在高并发场景下如鱼得水,轻松应对各种性能挑战。
第二章:代码可维护实践
代码可维护是软件长期发展的关键。这部分我们将学习 Go 语言中实现维护性强的项目的各种实践,包括项目拆分、目录结构设计、常用的设计原则和设计模式、函数设计等。让你打造出易于扩展、容易理解的高质量软件系统。
第三章:服务稳定性实践
软件系统的稳定、可靠也至关重要。第三章包含编码、架构和流程 3 个方面,我们将掌握 Go 编程中容易踩的坑和编码规范,并学习如何从架构和流程上保证服务的稳定性(包括熔断、降级、限流、隔离、灰度发布等)。

学完这门课你将获得什么?

说了这么多,这门课到底能让你学到哪些具体的技能点呢?我用一张图展示一下。
当然,这门课目的不仅是想教给你一个个技能点,而是想让你掌握解决服务性能、代码维护性、稳定性方面实际问题的能力。学完整门课程之后,我们将会达成以下目标:
掌握 Go 在高并发低延时场景下的性能优化方案,能够设计和编写出高性能的系统,提升服务吞吐,降低接口延时。
学会构建维护性强的 Go 项目和代码结构,能够轻松应对未来的功能扩展和需求变化,提高代码的可读性和可扩展性。
了解 Go 容易踩的坑和代码规范,从流程和架构上保障服务稳定性,确保写出无 bug、稳定运行的系统,增强系统的稳定性。
提升整体的 Go 编码和架构水平,能够开发出高效、可靠、易于维护的软件系统,为企业和个人项目带来更大的价值。
最后,关于怎么学习这门课,我还想给你一些建议。
第一,注重实战。课程所有的演示源码,我都会放在 Github 上。建议你学习完每节的图文内容以后,亲自动手跑跑代码,看看实际效果。
第二,注重思考。课程里的内容来自于我从工作实践中的思考和总结。我希望你在学习的时候,除了关注技能点,还能留意技能的使用场景,掌握我用这个技能点解决问题的思考过程。这样你才能举一反三,把学到内容在实际工作里灵活运用。
高手不是一蹴而就的奇迹,而是稳定持续地变强。让我们踏上 Go 服务开发高手的修炼之旅,一同迎接更广阔的未来!
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. Go服务开发面临的挑战包括性能、可维护性和稳定性需求,需要掌握相关技巧和实践经验。 2. 成为Go服务开发高手的难点在于掌握性能优化、可维护性和稳定性方面的知识和技能,并能够灵活应对复杂情况。 3. 课程设计旨在让学习者能够独立应对生产实践中的技术难题,通过还原实践场景的问题、分析原理并动手实现,达到真正融会贯通的目的。 4. 课程分为三章,分别涵盖高性能实践、代码可维护实践和服务稳定性实践,帮助学习者轻松应对各种技术挑战。 5. 通过课程学习,学习者将能够成为Go服务开发领域的高手,独立应对各种技术挑战,提升自身的技术水平。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 服务开发高手课》
新⼈⾸单¥59
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
大纲
固定大纲
Go 服务开发面临哪些挑战?
成为 Go 服务开发高手难在哪?
我们课程是如何设计的?
学完这门课你将获得什么?
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部
文章页面操作
MAC
windows
作用
esc
esc
退出沉浸式阅读
shift + f
f11
进入/退出沉浸式
command + ⬆️
home
滚动到页面顶部
command + ⬇️
end
滚动到页面底部
⬅️ (仅针对订阅)
⬅️ (仅针对订阅)
上一篇
➡️ (仅针对订阅)
➡️ (仅针对订阅)
下一篇
command + j
page up
向下滚动一屏
command + k
page down
向上滚动一屏
p
p
音频播放/暂停
j
j
向下滚动一点
k
k
向上滚动一点
空格
空格
向下滚动一屏
播放器操作
MAC
windows
作用
esc
esc
退出全屏
⬅️
⬅️
快退
➡️
➡️
快进
空格
空格
视频播放/暂停(视频全屏时生效)