我一直从事服务器后端系统开发快 10 年了,工作中先后使用过 C#、Java、Go 等语言。我当前的工作需要把平台迁移到 Go,从零开始构建基础设施框架,并在基础设施框架上开发各种业务系统。在迁移过程中,我逐步自研了一套功能完善的基础框架,同时也对语言的一些特性有了更深入的了解。为了把这些宝贵的经验分享给大家,于是我开始在 GitChat 上写专栏。
专栏想告诉大家的是:如何把一门语言学精通了。什么叫精通,就是该会的东西都会了。你对语言有了更全面更深入的认识,同时掌握了如何利用逆向方法来推导某种细节,从而带到其他语言的学习中去。如此一来,你就可以告别学一门,吃力一门的窘境。
你可以把一门语言看成是一个长期项目,通过这个长期项目来锻炼、提升自己。对于 Go 来说,从代码实现上,主要有类型系统设计、函数执行、内置的数据结构、对象系统设计;运行时,主要涉及标准库,工具链等方面。但是这些方面仅仅看文档就能深入理解吗?
脱离 Go 文档之外,学习 Go 进阶会遇到哪些问题:
编程语言对线程有哪些抽象模型?
上下文切换对性能有哪些影响?
Go 语言如何管理内存?
垃圾回收如何实现并发清理和并发标记?
Go 语言 PMG 模型有什么优缺点?
并发和并行有什么不同?
同步和异步有什么不同?
同步与异步和阻塞非阻塞什么关系?
实现并发有哪些并发模型?
并发任务单元执行流程是什么?
数据共享方式有哪些?
同步通道与异步通道有什么不同?
通道有哪些成熟的使用范例?
最常见的有哪些锁?
用什么思路设计一个互斥锁?
如何实现原子操作?
用户空间的缓冲 IO 怎么设计?
缓冲区怎么设计?
管道怎么设计?
上下文有哪些设计模式?
Web Server 如何实现?
Web Framework 如何实现?
数据库 API 设计思想有哪些?
Go 语言访问权限有哪些规范?
反射性能如何?
CGO 和 Go 语言有没有关系?
表驱动的优点是什么?
如何使用 pprof 采集结果?
Go 语言有哪些工具链?
.....
脱离文档外,还有很多关于语言基础的问题等待解决与学习,我相信在项目中也是如此。
市面上讲 Go 语言的文章大多数属于帮助文档型,其目的是介绍基本语法,告诉你如何使用 API。要知道,技术日新月异,大多数初学者一直沉浸在各种各样的语言、框架中。学得广,但却不精,也无法抽出思想应用到其他语言,达到融会贯通。
如果这是你遇到的情况,那么你的学习方法可能出了问题。细节是魔鬼,任何简单的背后必然隐藏复杂的逻辑,你需要一个人帮助你一起征服蕴藏在细节中的难题。这也是我写这个专栏原因,希望这个专栏能与你一起:
抽丝剥茧,从 Go 背景知识到灵活使用,让你知其然也知其所以然。
一起思考 Go 语言设计,为什么这样设计?怎样设计?
使用反汇编、编程范式推导 Go 核心原理。
从架构思想层面解析 Go 语言每个细节。
最后,一起理解在官方文档中表达不清楚的知识点,助力项目与面试。
本专栏分为基础篇与进阶篇:
基础篇
第一部分:类型,包含类型存储、基础类型、引用类型、自定义类型等;
第二部分:表达式,包含流控制等;
第三部分:函数,包含函数执行、调用堆栈、参数及返回值、闭包等;
第四部分:数据,包含基础数据类型、常用数据结构等;
第五部分:对象,包含面向对象理论、方法、接口等。
进阶篇
第六部分:并发,进程、线程、协程、通道、同步等;
第七部分:系统,内存管理、垃圾回收、调度、系统监控等;
第八部分:标准库,io、bytes、context、net、db 等;
第九部分:测试,单元测试、性能测试、代码覆盖率、性能监控等。
专栏亮点
27 篇内容解析 Go 语言进阶知识点;
使用反汇编、编程范式推导 Go 核心原理;
从架构思想层面解析 Go 语言每个细节;
从 Go 语言背景知识到灵活使用,知其然知其所以然。
你将获得什么
掌握 Go 语言进阶特性;
学会从架构层面思考编程语言设计。
适宜人群
从事服务端架构设计的架构师、开发人员
对 Go 系统开发感兴趣的开发人员
想了解 Go 语言底层原理实现的开发人员
即日起至 4 月 1 日,《重学 Go 语言:进阶篇》限时特惠!现在订阅专栏,即可和作者一起深入解析 Go 语言设计思想!