到达 Golang 大陆:一位资深开发者之旅。 |
2014 年夏天……linux
IBM:“咱们须要你弄清楚这个 Docker。”程序员
我:“没问题。”shell
IBM:“那就开始吧。”编程
我:“好的。”(心里声音):”Docker 是用 Go 编写的。是吗?“(Google 一下)“哦,一门编程语言。我在个人岗位上已经学习了不少了。这不会太难。”vim
个人大学新生编程课是使用 VAX 汇编程序教授的。在数据结构课上,咱们使用 Pascal —— 在图书馆计算机中心的旧电脑上使用软盘加载。在一门更高一级的课程中,个人教授教授喜欢用 ADA 去展现全部的例子。在咱们的 Sun 工做站上,我经过各类 UNIX 的实用源代码学到了一点 C。在 IBM,OS/2 源代码中咱们使用了 C 和一些 x86 汇编程序;在一个与 Apple 合做的项目中咱们大量使用 C++ 的面向对象功能。不久后我学到了 shell 脚本,开始是 csh,可是在 90 年代中期发现 Linux 后就转到了 Bash。在 90 年代后期,我在将 IBM 的定制的 JVM 代码中的即时(JIT)编译器移植到 Linux 时,我不得不开始学习 m4(与其说是编程语言,不如说是一种宏处理器)。数据结构
一晃 20 年……我从未由于学习一门新的编程语言而焦灼。可是 Go 让我感受有些不一样。我打算公开贡献,上传到 GitHub,让任何有兴趣的人均可以看到!做为一个 40 多岁的资深开发者的 Go 新手,我不想成为一个笑话。咱们都知道程序员的骄傲,不想丢人,不论你的经验水平如何。编程语言
我早期的调研显示,Go 彷佛比某些语言更 “地道”。它不只仅是让代码能够编译;也须要让代码能够 “Go Go Go”。编辑器
如今,个人我的的 Go 之旅四年间有了几百个拉取请求(PR),我不是致力于成为一个专家,可是如今我以为贡献和编写代码比我在 2014 年的时候更舒服了。因此,你该怎么教一个老人新的技能或者一门编程语言呢?如下是我本身在前往 Golang 大陆之旅的四个步骤。工具
虽然你能够经过复制代码来进行你早期的学习(谁还有时间阅读手册!?),Go 有一个很是易读的 语言规范,它写的很易于理解,即使你在语言或者编译理论方面没有取得硕士学位。鉴于 Go 的 参数:类型 顺序的特有习惯,以及一些有趣的语言功能,例如通道和 go 协程,搞定这些新概念是很是重要的是事情。阅读这个附属的文档 高效 Go 编程,这是 Golang 创造者提供的另外一个重要资源,它将为你提供有效和正确使用语言的准备。学习
有许多宝贵的资源可供挖掘,能够将你的 Go 知识提高到下一个等级。最近在 GopherCon 上的全部讲演均可以在网上找到,如这个 GopherCon US 2018 的详尽列表。这些讲演的专业知识和技术水平各不相同,可是你能够经过它们轻松地找到一些你所不了解的事情。Francesc Campoy 建立了一个名叫 JustForFunc 的 Go 编程视频系列,其不断增多的剧集能够用来拓宽你的 Go 知识和理解。直接搜索 “Golang" 能够为那些想要了解更多信息的人们展现许多其它视频和在线资源。
想要看代码?在 GitHub 上许多受欢迎的云原生项目都是用 Go 写的:Docker/Moby、Kubernetes、Istio、containerd、CoreDNS,以及许多其它的。语言纯粹主义者可能会认为一些项目比另一些更地道,但这些都是很好的起点,能够看到在高度活跃的项目的大型代码库中使用 Go 的程度。
你会很快了解到 gofmt 的宝贵之处。Go 最漂亮的一个地方就在于没有关于每一个项目代码格式的争论 —— gofmt 内置在语言的运行环境中,而且根据一系列可靠的、易于理解的语言规则对 Go 代码进行格式化。我不知道有哪一个基于 Golang 的项目会在持续集成中不坚持使用 gofmt 检查拉取请求。
除了直接构建于运行环境和 SDK 中的一系列有价值的工具以外,我强烈建议使用一个对 Golang 的特性有良好支持的编辑器或者 IDE。因为我常常在命令行中进行工做,我依赖于 Vim 加上强大的 vim-go 插件。我也喜欢微软提供的 VS Code,特别是它的 Go 语言 插件。
想要一个调试器?Delve 项目在不断的改进和成熟,它是在 Go 二进制文件上进行 gdb 式调试的强有力的竞争者。
你要是不开始尝试使用 Go 写代码,你永远不知道它有什么好的地方。找一个有 “须要帮助” 问题标签的项目,而后开始贡献代码。若是你已经使用了一个用 Go 编写的开源项目,找出它是否有一些能够用初学者方式解决的 Bug,而后开始你的第一个拉取请求。与生活中的大多数事情同样,实践出真知,因此开始吧。
事实证实,你能够教会一个资深的老开发者一门新的技能甚至编程语言。