为《Go语言学习指南:惯例模式与编程实践》序


译者序

2007年9月20日的下午,在谷歌山景城总部的一间办公室里,谷歌的顶级程序员 Rob Pike在等待一个 C++ 项目构建的过程中与谷歌的另外两个顶级程序员 Robert Griesemer和 Ken Thompson进行了一次有关设计一门新编程语言的讨论,他们一拍即合,从此诞生了Go这门新的编程语言。Go语言在2009年开源后,凭借开放活跃的社区,以不可思议的速度成长,并诞生了Docker、Kubernetes 等“里程碑级”项目,这些项目让Go被誉为“云计算基础设施新兴语言”,有人直接称其为云计算语言。

时至今日,几乎每一位程序开发者都会在每天的工作中直接使用着Go语言或者使用Go语言编写的工具,从国内一些招聘网站数量庞大的Go语言岗位需求中,也不难发现Go语言的巨大潜力,以及掌握和精通这样一门编程语言的必要性。作者Jon Bodner在书中并未采用教程式的行文,而是从编程实例出发,引出Go语言的语法知识和编程实践。整个过程深入浅出地讲述了编程原理知识,通过大量的代码示例展示了如何写出符合Go语言惯例的代码,并反复强调代码清晰与简单的重要性。其中还解释了可能影响程序行为的底层概念,比如指针对内存布局与垃圾回收的影响。全书层层推进,娓娓道来,让读者们知其然更知其所以然,这些精粹的知识能够帮助我们更好的了解Go语言,做出科学与合理的架构设计,更高效的排查各种复杂的程序异常以及线上故障。

本书是学习Go语言不可多得的一本好书,其内容之新,甚至涵盖目前未正式发布的泛型。在亚马逊网站上搜索“Golang”,会发现本书在五星好评中排名第一(Go语言的超级畅销书Go Programming Language也只有四星半)。我从2019年开始接触使用Go语言,对这门语言尤为喜爱:它优秀的语言设计,出色的并发特性,丰富强大的工具链,活跃的社区等深深吸引着我。我们有幸站在巨人的肩膀上翻译了本书,在翻译过程中我们深深体验到了Go语言的设计哲学和无穷魅力。我们三人在近半年的翻译中倾注了很多心血,希望尽最大的努力将本书的所有精华都展现给读者,以帮助更多的朋友从中受益。尽管如此,仍难免有疏漏或者不尽如人意之处,敬请广大读者不吝斧正。

杨波,2021年12月于武汉。

第一篇:开启第二编程语言之旅

沈淦 有赞技术副总裁

Go语言解决了当今软件开发人员不得不面对的一个普遍问题:在快速开发和性能之间做出选择。C和C++这类语言提供了很快的代码执行速度,Java在开发效率和运行速度上做了平衡,而Ruby和Python这类语言则擅长快速开发。Go语言则很好地兼顾开发效率和运行速度,不仅提供了高性能的运行时,也降低了大型项目的开发难度。

Go语言发布至今已经有十余年。今天,很多大型的互联网系统都建立在Go语言的架构上。同时,更多的人像我这样对Go语言略知一二,从未使用Go语言开发过正式项目但希望走进Go语言的世界。如果你已经熟练掌握了一门编程语言(比如Java),这本书就是你快速上手Go语言的绝佳选择。

这本书介绍的概念并不繁杂:第1章主要帮助初学者搭建一个良好的Go语言开发环境;第2~9章由浅入深地讲述Go语言从简单的演示代码编写到实际应用开发所需要的基础知识;第10~13章探索了Go语言在分布式服务器端开发中得天独厚的优势;第14章和第15章指出了Go语言目前的限制和容易被误用或滥用的特性,并展望了Go语言未来的发展趋势。

本书的作者Jon Bodner是一名既精通Go语言又深谙互联网开发精髓的行业老兵,书中的内容组织结构特别精彩,有些知识点一笔带过,有些知识点浓墨重彩(比如针对goroutine生命周期的章节)。加上几位译者精准的翻译,本书将Go语言在分布式系统开发和工程实践方面的优势表达得淋漓尽致。

特别感谢学凡向我推荐这本书,通过几个星期的边学边练,感觉自己也从一个Go语言门外汉变成了略通一二的Gopher(指Go语言的爱好者与从业者,同理,Javaer、Pythonista指Java、Python的爱好者与从业者)。期待更多在转型路上的Javaer、Pythonista伙伴们阅读本书,开启自己的第二编程语言(或第N编程语言)之旅。

第二篇:Go,我的第N语言

于鑫蕾 凯捷咨询资深架构师

在计算机软件领域奋斗多年,依然清晰记得求学时代老师的教导:“计算机语言不只是一套与计算机交流的工具,也是一套实践方法和模式的沉淀。”

本书能帮助你快速掌握Go语言的关键字、类型、语法、函数、指针、错误处理、并发编程。你还会发现Go语言致力于编写在较长的软件生命周期中更易于维护的代码。例如,Go编译器对指向局部变量的指针进行了优化处理。倘若你熟悉C语言,相信对指针指向无效的内存所造成的异常并不陌生。

本书除了介绍Go语言的基本语法以外,还对比了Go与C语言,并讲述了Go编译器在平衡性能与提高代码维护性方面所做的优化。Go有25个关键字,但是表达能力很强大,几乎支持大多数你在其他语言见过的特性:继承、重载、对象等。

在过去几年的软件研发实践中,我所在的项目组使用了大量“云原生”以及“云基础架构代码化”工具,比如著名的Terraform、Kubernetes等。单纯使用Terraform只需要掌握模版语法即可,然而究其根本,无论是Terraform还是Kubernetes,都是采用Go作为底层语言开发的,熟练掌握Go语言之后再回头看这些“云原生”工具,你会有一种“恍然大悟“的感觉。 开发Kubernetes 自定义控制器时你将更加得心应手。本书第10章的并发编程将带你体会Go在语言层面支持并发的魅力。并发是Go的DNA,这也是在这腾“云”驾“物”的时代Go语言如此活跃的原因。

学无止境,不论是刚接触编程语言的新手,还是将Go作为第N语言的全栈专家,通过阅读本书,都能够以全新的方式思考软件,体会并学到最地道的Go语言实践哲学。

第三篇:人生苦短,只读好书

吾真本  Thoughtworks首席咨询师,《混沌工程:复杂系统韧性实现之道》译者

读书很花时间。由于要运行书中的代码,读编程语言的书就更花时间。对于难以实现时间自由的程序员来说,只有选择读好书,才能让睡眠的时间更多些。

“人生苦短,只读好书”。

我一般用下面的方法来寻找编程语言方面的好书。以Go语言为例。先用英文搜索引擎搜索“books about golang”。然后从搜索结果中挑选一些近几年出版的书,之后再打开amazon.com网站,逐一查看这些书的评分星级和书评。如此就能选出好书。

读国外读者写的书评,时常会有惊喜。比如,从著名的蓝皮书The Go Programming Language的书评中,我得知Go会构建静态绑定的可执行文件。这样一来,就不会在运行时出现DLL或.so版本依赖不匹配的烦恼了。另外,一位读者在Network Programming with Go一书的书评中提到,她在读该书时会与蓝皮书和Learn Go with Tests两本书一起读,以便将来读更高阶的Distributed Services with Go。根据她的提示,喜爱编程演练的我不仅找到了符合我的Learn Go with Tests一书,还从中找到了通过实例学习Go语言的网站https://gobyexample.com。

下面是按照上述方法,我找到的7本Go语言的好书。先按读者评分星级,然后按书评数量,最后按出版日期排序。书评数量越多,说明读者关注度越高。

第7名:Network Programming with Go,作者Adam Woodbeck,2021年3月25日出版,4.6星,19条书评。

第6名:Distributed Services with Go,作者Travis Jeffery,2021年4月6日出版,4.6星,22条书评。

第5名:Cloud Native Go,作者Matthew A. Titmus,2021年5月11日出版,4.6星,22条书评。

第4名:Head First Go,作者Jay McGavren,2019年5月7日出版,4.6星,106条书评。

第3名:Mastering Go第3版,作者Mihalis Tsoukalos,2021年8月31日出版,4.7星,9条书评。

第2名:蓝皮书The Go Programming Language,作者Alan Donovan 与 Brian Kernighan,4.7星,919条书评。

第1名:Learning Go(本书),作者Jon Bodner,4.8星,71条书评。

我读了本书英文版前9章。感觉行文流畅,讲解实用。就像在听一位开发经验丰富的高手在我面前娓娓传授Go语言的武功秘籍。作者不仅讲清楚了“是什么”,还会告诉你“为什么”,以及“什么时候该这样用,什么时候该那样用”。

作为曾经翻译过几本英文书的我,浏览本书的中文译稿时,也同样感觉十分流畅。我深知译者和编辑的辛苦,所以在此对他们的辛勤付出表示由衷感谢。

编程圈和图书圈的流行趋势就像时尚圈的流行趋势一样,日新月异。几个月之后,上述好书列表必然会发生变化。但我希望上述方法对你有所帮助。也希望你我一起抓紧时间阅读本书,不要辜负了这本排名第一的好书。

第四篇:大道至简

张喻  腾讯高级开发工程师,《遗留系统重建实战》译者

在如今互联网红利褪去的时代,“互联网黑话”似乎是一根救命稻草,轻而易举地把简单的事情描述得复杂化,从而凸显其气势磅礴。在编程领域,复杂的架构固然让人肃然起敬,但是拥有将复杂问题简单化的艺术,则显得尤为耳目一新。

作为一名前些年一直专注于Java领域的开发者,接触到Go语言之后,竟也不免为它的一些特性而感到惊喜。它能非常快速的搭建一个应用,灵活且轻便,强大且高效。

它保持极端简单的行为文化,直接根源于C的简洁、高效,实现了编程哲学的重塑,同时满足了互联网时代的并行与分布式的需要以及大规模软件工程的需求。比如最少特性原则,如果一个功能不对解决问题有显著的价值,那么就不提供;比如极度简化但完备的面向对象编程(OOP)方法。它废弃了大量的OOP特性,如继承、构造/析构函数、虚函数、函数重载、默认参数等;再比如并发编程时,Go语言在语言级别就支持了协程并发,通信方式是基于消息传递的,而不是大多数语言使用的基于共享内存的通信方式。对比Java的多线程,协程更轻量、使用更简单,但却能更直接、高效地解决问题。

可以看到,Go语言在业界越来越得到广泛的认可,有很多著名的开源项目都是使用Go语言编程,比如Docker、Kubernetes。目前,国内互联网的很多新兴项目也逐渐向Go语言转型。

作为一本工具书,本书适合有一定编程经验的开发人员阅读。不论此时此刻的你学习的是什么语言,我相信,通过这本书去了解该语言的特性,你会发现语言背后所隐含的底层设计思维,以及大道至简的哲学思考,才是弥足珍贵的。

第五篇:像地鼠(Gopher)一样思考

周训杰 企业架构师,《演进式架构》、《解决方案架构师修炼之道》、《如何编写好程序》译者

说起语言,无论是自然语言还是编程语言,都有许多相通之处。很多人在学习第二语言的时候会发现无论对语法和词汇多么熟悉,依然无法做到像母语者那样“地道”的表达和“精准”地阐述。这是因为他们忽视了历史、文化、生活方式对语言的塑造。学习编程语言也是一样的,如果忽略了该语言诞生的背景、设计初衷以及底层设计逻辑,我们就会写出不符合范式的代码,更甚者是可能会不断带入已经熟悉的编程语言的编程思路与范式,使得程序无法发挥语言本身的优势,继而引发错误。

幸而我们有了这本书,它在为读者讲述如何从Gopher的视角来编写代码。作者在介绍Go语言的特性、语法以及内置对象时,不仅涵盖了基本内容,而且从Go的底层设计逻辑来帮助读者理解其特点。在一些常见场景下作者还会将Go语言同其他流行的语言(如Java、C++ )进行比较,帮助读者快速掌握Go语言的最佳实践。

非常感谢三位译者将本书译为中文版,使得更多国内的读者能通过本书领略Go语言的魅力。我惊喜地发现三位译者用中文精准地还原了全书,也根据自己的理解加入了很多极具价值的注释,体现了他们对Go 语言的深入思考和深厚的程序设计功底。

Go语言自诞生以来,随着自身的不断演进,已经成为了一门非常成熟并具有鲜明特点的编程语言,其开发者基数正在不断扩大。随着业内使用Go语言编写的明星产品不断涌现,Go语言也获得了国内很多软件大厂的青睐。如果你正好也希望尝试Go语言,并系统地学习,那么本书将会是你的最佳选择。

第六篇:工欲善其事,必先利其器

刘虎 卓尔信科研发中心CTO 

“工欲善其事,必先利其器”。在好友的推荐下,我迫不及待地读完了全书,作者对于Go语言的描述完整且详细,任何关于语言本身的问题都可以在书中找到答案。全书完全按照Go编程风格编写,所有的例子和讲解都遵循Go的思路和风格,如果我们能够静下心来认真学习,就能“一次到位”地掌握Go语言的精髓。本书无论对于初学者,还是对于已经踏上Go语言编程之路的修行者,都是经典的教科书,也是我们快速提升自身能力的最佳“利器”。

Go是一门致力于“化繁为简”的编程语言,本书耐心地引导读者学习并采用Go语言的最佳特性。在Go的所有特性里,本人最喜欢垃圾回收、goroutine、通道以及接口。Go是一套工具、实践和模式,用Go编写的软件在其较长的生命周期中更容易进行维护。我对这段话再多加一重理解:Go可以让初学者很快写出高并发、高负载能力生产级代码。这样的代码特别适合成专长型或创业团队,如果希望满足对“奇妙”代码的好奇心,本书是最佳的开始。

今天的Go语言学习者无疑是非常幸运的,本书具备极高的知名度,我们得以有机会在大师打下的基础上大步向前,不必再为某些语言的缺陷和过度的技巧而烦恼。Go是一个工程工具,工具本身能否发挥更大的价值在于使用工具的我们。本书的几位译者都是Go领域的实践者,译本完全再现了原书的魅力,极大地开拓了我的视野,我向各位读者隆重推荐这本书。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容