资料分享 Go 专栏:改善 Go 语言编程质量的 50 个有效实践 上线了,早鸟 58 元,欢迎订阅学习。

bigwhite-github · 2020年09月30日 · 267 次阅读

各位 gopher 大家好, 断断续续写了一年多的Go 专栏:《改善 Go 语言编程质量的 50 个有效实践》今天终于正式上线了!- https://www.imooc.com/read/87

慕课专栏:《改善 Go 语言编程质量的 50 个有效实践》

Go 语言是 Google 大牛团队 (Robert Griesemer、Rob Pike 以及 Ken Thompson) 设计的一种静态类型、编译型编程语言,支持垃圾回收和轻量级并发,它于 2009 年 11 月诞生,一面世就以语法简单、原生支持并发、标准库强大、工具链丰富等优点吸引了大量开发者。经过10 余年演化和发展,Go 如今已成为云基础架构的标准编程语言,很多云原生时代的杀手级平台、中间件、协议和应用都是采用 Go 语言开发的,比如:DockerKubernetes以太坊Hyperledger Fabric 超级账本、新一代互联网基础设施协议ipfs等。

Go 是一门特别容易入门的编程语言,无论是刚出校门的新手还是从其他编程语言转过来的成手,都可以在短时间内快速掌握 Go 语法并投入到 Go 代码的编写中。但笔者在日常收到很多 Go 初学者的疑问:Go 入门容易,但进阶难,怎么才能像 Go 团队那样写出符合 Go 思维和语言惯例 (idiomatic) 的高质量代码呢?

这个问题也引发了我的思考。在2017 年 GopherChina 大会上笔者以演讲的形式初次尝试回答这个问题,但鉴于演讲的时长有限,很多内容难于展开,效果不甚理想。而这个慕课网专栏则是我对解答这个问题作出的第二次尝试。

这次解答的思路有两个:

  • 思维层面:写出高质量 Go 代码的前提是思维方式的进阶,即使用 Go 语言的思维去写 Go 代码
  • 实践技巧层面:Go 标准库、优秀 Go 开源库是一个挖倔高质量、符合 Go 惯用法的 Go 代码的宝库,对其进行阅读、挖掘和整理归纳,我们可以得到一些帮助我们快速进阶的有效实践

本专栏正是基于上面思路为想实现 Go 进阶但又不知从何入手的你而设的

首届图灵奖得主、著名计算机科学家艾伦·佩利 (Alan J. Perlis) 曾经说过:“不能影响到你的编程思维方式的编程语言不值得去学习和使用”,足见编程思维对编程语言学习和应用的重要性。只有真正领悟了一门编程语言的设计哲学和编程思维,并将其应用到日常编程当中去,你才算是真正地实现了在这门编程语言上的进阶。

因此,本专栏首先将带领大家回顾 Go 语言的演化历史,一起了解并深刻体会 Go 大牛们在设计 Go 语言时的所思所想,与大牛们实现思维上的共鸣,理清那些看似随意的,实则经过深思熟虑的设计的背后的付出。

接下来,本专栏将基于笔者对 Go 核心团队、Go 社区高质量代码的分析归纳,从代码风格、基础语法、函数/方法、接口、并发、错误处理、测试调试、标准库、工程实践等多个方面给出改善 Go 代码质量,写出符合 Go 思维和惯例的代码的有效实践。

学习了本专栏的这 50 条有效实践,你将拥有和 Go 大牛们一样 Go 编程思维,写出符合 Go 惯例风格的高质量 Go 代码,从众多 Go 入门选手中脱颖而出,快速实现从 Go 编程新手到专家的转变!

本专栏共分 10 个模块 (篇),50 个小节。

  • 模块 1:设计哲学篇

本专栏的开篇和总起。和读者一起穿越时空,回顾历史,详细了解 Go 语言的诞生、演化以及今天的发展。归纳总结 Go 语言的设计哲学和原生编程思维,让读者可以站在语言设计者的高度理解 Go 语言与众不同的设计,在更高层次,形成共鸣,产生认同。只有强烈认同,才能更上一层楼。

  • 模块 2:代码风格篇

每种编程语言都有自己惯用的代码风格,而遵循语言惯用风格是高质量 Go 代码的必要条件。本篇详细介绍了得到公认且广泛使用的 Go 工程的结构布局、代码风格标准、标识符命名惯例以及变量声明形式等。

  • 模块 3:基础语法篇

本模块详述在基础语法层面高质量 Go 代码的惯用法和有效实践,涵盖无类型常量的作用、定义 Go 的 “枚举常量”、“零值可用” 类型的意义、切片原理以及其高效的原因、Go 包导入路径的真正含义等。

  • 模块 4:函数与方法篇

函数和方法是 Go 程序的基本组成单元。本模块聚焦于函数与方法的设计与实现,涵盖 init 函数的使用、跻身 “一等公民” 行列的函数有何不同、Go 方法的本质等帮助读者深入理解它们的内容。

  • 模块 5:接口篇

接口是 Go 语言中的 “魔法师”。本模块将聚焦接口,涵盖接口的设计惯例、使用接口类型的注意事项以及接口类型对代码可测试性的影响等。

  • 模块 6:并发编程篇

Go 以其轻量级的并发模型而闻名。本模块将详细介绍 Go 基本执行单元 - goroutine 的调度原理、Go 并发模型以及常见并发模式、Go 支持并发的原生类型-channel 的惯用使用模式等内容。

  • 模块 7:错误处理篇

Go 语言十分重视错误处理,它有着相对保守的设计和显式处理错误的惯例。本模块将涵盖 Go 错误处理的哲学以及在这套哲学下一些常见错误处理问题的优秀实践方案。

  • 模块 8:测试与调试篇

Go 自带强大且为人所称道的工具链,本模块将详细介绍 Go 在单元测试、性能测试以及代码调试方面的最佳实践方案。

  • 模块 9:标准库篇

Go 拥有功能强大且质量上乘的标准库,多数情况我们仅使用标准库所提供的功能而不借助第三方库就可实现应用的大部分功能,这大幅降低学习成本以及代码依赖的管理成本。本模块将详细说明高频使用的标准库包,如 net/http、strings、bytes、time 等的正确使用方式,以及 reflect 包、cgo 在使用时的注意事项。

  • 模块 10:工程实践篇

本模块将涵盖我们使用 Go 语言做软件项目过程中很大可能会遇到的一些工程问题的解决方法,包括:使用 module 进行 Go 包依赖管理、Go 应用容器镜像、Go 相关工具使用以及 Go 语言的避 “坑” 指南。

从上述专栏结构,我们也能看出本专栏并不是 Go 入门的最佳选择。如果非要给本专栏划定一个目标人群,或者说哪些读者阅读本专栏后会更多受益,我觉得是那些已经迈入 Go 语言世界、但迫切希望进一步提升层次、写出高质量 Go 代码的 Go 开发者。

很多朋友可能会问?你这个专栏有何与众不同之处?在专栏上线前编辑老师也让我编写课程亮点,我觉得下面这几句话可以概括专栏的特点:

  • 进阶必备 - 50 个有效实践助你掌握高效 Go 程序设计之道;
  • 高屋建瓴 - Go 设计哲学与编程思想先行;
  • 深入浅出 - 原理深入,例子简明,讲解透彻;
  • 图文并茂 - 大量图表辅助学习,重点难点轻松掌控;
  • 覆盖全面 - 覆盖高级面试知识点,求职更自信。

本专栏第一次落笔大约在Go 1.12发布后,大约将在今年 10 月份,即在Go 1.15发布后的第二个月完成。这中间有一定的跨度,因此专栏内的有些内容在各个 Go 版本间可能会有差异。笔者在内容中已经尽量做了版本适用标识,但难免有疏漏。各位读者在遇到问题时,可以及时反馈给我。

此外,Go 语言还在飞速发展,一些当前的惯用表达方式或有效实践可能在日后因语言引入新的特性 (比如:Go 泛型) 而“过时”。我会在我的博客上持续关注 Go 语言的演化,并将最新的 Go 高效编程实践分享给大家。

最后再来一次自我介绍:Tony Bai,Go 语言技术专家和鼓吹者,GopherChina 大会讲师,Go 语言技术博客tonybai.com的作者,GopherDaily(Go 日报) 项目(github.com/bigwhite/gopherdaily) 维护者,OSCHINA源创会技术讲师《七周七语言》译者之一,慕课网《Kubernetes 实战:高可用集群搭建、配置、运维与应用》作者,开源拥趸

作为一名在国内接触 Go 语言较早 (2012 年) 的 Gopher 和 Go 布道师,Tony Bai 拥有丰富的 Go 开发知识和经验。他在个人博客上撰写了大量关于 Go 语言的文章,并深受 Go 社区欢迎。目前他正在国内一大型软件公司带领团队使用 Go 语言构建移动运营商的 5G 消息平台,这个平台将处理来自全国各地几十万个 5G chatbot 程序每天发送的几十亿条 5G 消息请求。

欢迎大家订阅我的专栏! 如有意见和建议,可在我本博文后面的评论中反馈。感谢大家支持。

专栏涉及的源码仓库地址https://github.com/bigwhite/publication/tree/master/column/imooc/go-50tips/sources

更多原创文章干货分享,请关注公众号
  • 加微信实战群请加微信(注明:实战群):gocnio
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册