首页>参考读物>公共基础课>心理生活

Go语言学习指南:惯例模式与编程实践
作者 : [美]乔恩·博德纳(Jon Bodner)著
译者 : 杨波 曾智 万学凡 译
出版日期 : 2022-04-29
ISBN : 978-7-111-70383-9
定价 : 119.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 334
开本 : 16
原书名 : Learning Go
原出版社: O'Reilly Media, Inc.
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

Go语言正在迅速成为构建Web服务的优选语言。本书很好地阐述了Go语言的特性,同时指出了Go语言的惯例代码、陷阱和设计模式。本书语言生动,表述清晰,将Go语言的基本原理与语言哲学联系在一起,引导读者正确编写Go语言。既介绍基础知识,又涵盖高级主题(如反射和C语言互操作),通过大量例子演示了如何写出符合Go语言惯例的代码,解释了可能影响程序行为的底层概念,比如指针对内存布局和垃圾回收的影响。无论你是Go语言的初学者,还是经验丰富的Go语言从业人员,相信都能从本书中获益良多。

图书特色

图书前言

最初我想给本书取名为Boring Go,因为用Go语言编写程序确实很无趣。
就一个无趣的主题来写一本书可能看起来有点奇怪,所以我应该再解释一下。Go有小部分功能集与大多数其他现代编程语言格格不入。编写良好的Go程序往往简单明了,有时还有些重复。Go语言没有继承,没有泛型(目前还没有),没有面向切面的编程(aspect-oriented programming),没有函数重载,没有操作符重载,没有模式匹配,没有命名参数,没有异常。让很多人望而生畏的是,Go竟然有指针。Go的并发模型也与其他语言不同,但它基于20世纪70年代的思想,其垃圾收集器使用的算法也是如此。简言之,Go有些复古,而这正是关键所在。
不过,无趣并不意味着平庸。要想正确使用Go,就需要了解它的功能是如何整合在一起的。即使你能够写出看起来像Java或Python的Go代码,也并不会满足于得到的结果,并且想弄清楚所有这些特性背后的底层机制是怎么回事。这正是本书的意义所在。本书清楚地介绍了Go的特性,解释了如何才能最大限度地使用它们来编写可长期维护且符合Go语言惯例的代码。
在需要构建某种可持续发展的事物时,无趣是件好事。如果一座桥是用一项未经测试的技术建造而成的,即使工程师认为这项技术超级酷,也绝没有人愿意成为第一个开车通过的人。许多编程语言在添加特性时并没有考虑它们对代码库可维护性的影响。Go的目标正是让开发者能够更容易、更高效地在几十年的软件生命周期中持续构建规模化的软件。
Go语言确实很无趣,但是也很奇妙。希望本书能够教会你如何用无趣的代码构建令人振奋的项目。
目标读者
本书的目标读者是想要学习Go语言的开发者,尤其是Go语言的初学者。本书的重点不是简单地用Go写程序,而是写出符合Go语言惯例的程序。有经验的Go开发者可以在书中找到关于如何最有效地使用该语言的新特性的建议。最重要的是,读者希望能够学到如何写出像Go一样的Go代码。
读者需要有开发者行业工具的使用经验,比如版本控制(最好是Git)和IDE。读者还应该熟悉基本的计算机科学概念,如并发编程和抽象,因为书中解释了它们如何在Go中工作。其中一些代码示例可以从GitHub上下载,还有几十个示例可以在The Go Playground上在线试用。虽然互联网连接不是必需的,但它在回顾可执行示例时很有帮助。由于Go经常被用来构建和调用HTTP服务端,所以有些示例需要读者熟悉基本的HTTP概念。
虽然Go的大部分特性在其他语言中都能找到,但Go做出了不同的权衡,所以用它编写的程序具有不同的结构。学习Go首先要从设置Go开发环境开始,然后涵盖变量、类型、流程控制和功能。请不要跳过这些细节,正是这些细节让你的代码符合Go的惯例。
排版约定
本书中使用以下排版约定:
斜体(Italic)
表示新的术语、URL、电子邮件地址、文件名和文件扩展名。
等宽字体(Constant width)
用于程序清单,以及段落中的程序元素,例如变量名、函数名、数据库、数据类型、环境变量、语句以及关键字。
等宽粗体(Constant width bold)
表示应由用户直接输入的命令或其他文本。
等宽斜体(Constant width italic)
表示应由用户提供的值或由上下文确定的值替换的文本。
该图示表示提示或建议。
该图示表示一般性说明。
该图示表示警告或注意。
示例代码
可以从https://github.com/learning-go-book下载补充材料(示例代码、练习、勘误等)。
这里的代码是为了帮助你更好地理解本书的内容。通常,可以在程序或文档中使用本书中的代码,而不需要联系O’Reilly获得许可,除非需要大段地复制代码。例如,使用本书中所提供的几个代码片段来编写一个程序不需要得到我们的许可,但销售或发布O’Reilly的示例代码则需要获得许可。引用本书的示例代码来回答问题也不需要许可,将本书中的很大一部分示例代码放到自己的产品文档中则需要获得许可。
非常欢迎读者使用本书中的代码,希望(但不强制)注明出处。注明出处时包含书名、作者、出版社和ISBN,例如:
Learning Go,作者Jon Bodner,由O’Reilly出版,书号978-1-492-07721-3
如果读者觉得对示例代码的使用超出了上面所给出的许可范围,欢迎通过permissions@oreilly.com联系我们。
O’Reilly在线学习平台(O’Reilly Online Learning)
40多年来,O’Reilly Media致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。
我们拥有独一无二的专家和革新者组成的庞大网络,他们通过图书、文章、会议和我们的在线学习平台分享他们的知识和经验。O’Reilly的在线学习平台允许你按需访问现场培训课程、深入的学习路径、交互式编程环境,以及O’Reilly和200多家其他出版商提供的大量文本和视频资源。有关的更多信息,请访问http://oreilly.com。
如何联系我们
对于本书,如果有任何意见或疑问,请按照以下地址联系本书出版商。
美国:
O’Reilly Media,Inc.
1005 Gravenstein Highway North
Sebastopol,CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
要询问技术问题或对本书提出建议,请发送电子邮件至errata@oreilly.com.cn。
本书配套网站https://oreil.ly/learn-go上列出了勘误表、示例以及其他信息。
关于书籍、课程、会议和新闻的更多信息,请访问我们的网站http://oreilly.com。
我们在Facebook上的地址:http://facebook.com/oreilly
我们在Twitter上的地址:http://twitter.com/oreillymedia
我们在YouTube上的地址:http://www.youtube.com/oreillymedia
致谢
写书似乎应当是一项孤独的任务,但如果没有大家的帮助,本书就不会问世。在2019年的GopherCon大会上,我向Carmen Andoh提出想写一本关于Go语言的书,于是她把我介绍给O’Reilly出版社的Zan McQuade。Zan指导我完成了签约,并在我写作本书的过程中持续向我提供宝贵的建议。责任编辑Michele Cronin审校了全书并给予反馈,在我遇到无法避免的困难时耐心倾听。感谢文字编辑Tonya Trybula和制作编辑Beth Kelly,他们大幅提升了书稿质量,使本书得以顺利出版。
在本书的写作过程中,我得到了很多人的反馈和鼓励,其中有Jonathan Altman、Jonathan Amsterdam、Johnny Ray Austin、Chris Fauerbach、Chris Hines、Bill Kennedy、Tony Nelson、Phil Pearl、Liz Rice、Aaron Schlesinger、Chris Stout、Kapil Thangavelu、Claire Trivisonno、Volker Uhrig、Jeff Wendling和Kris Zaragoza。特别感谢Rob Liebowitz的大力帮助,如果没有他的详细批改和迅速反馈,本书远远达不到现在的水平。
感谢我的家人容忍我每个夜晚和周末都在计算机前度过,而不是陪伴他们。特别感谢我的妻子Laura,当我凌晨1点或更晚才上床睡觉时,她总是贴心地假装没有被我吵醒。
最后,我想对40年前引领我走上这条道路的两个人表达谢意。首先是Paul Goldstein,他是我一个儿时朋友的父亲。1982年,Paul向我们展示了一台Commodore PET,他先输入PRINT 2 + 2,然后按下回车键。当屏幕上显示4时,我惊呆了,顿时就被深深地吸引住了。后来他教我如何编程,甚至将这台PET借我用了几个星期。其次是我的母亲,她鼓励我对于编程和计算机的兴趣,尽管当时我根本不知道这些东西有什么用。她给我买了Atari 2600的BASIC编程盒、VIC-20和Commodore 64,以及一些编程书,这些书激发了我有朝一日自己写书的想法。
感谢他们帮助我实现了梦想。

专家评论

“Go语言非常独特,即使经验丰富的程序员也必须刻意忘掉某些固有思维,以完全不同的方式思考软件。本书很好地阐述了Go语言的特性,同时指出了Go语言的惯例代码、陷阱和设计模式。”
—Aaron Schlesinger,微软高级工程师
“Jon多年以来一直是Go语言社区中极为重要的成员,我们从他的讲座和文章中获益匪浅。本书正是Jon专门为程序员学习Go语言而写的指南,既很好地概述了Go语言的知识,也没有对其他语言中易于理解的概念加以重复。”
—Steve Francia,Google的Go语言产品负责人,
Hugo、Cobra和Viper的创作者
“Bodner深谙Go语言。他用清晰生动的语言讲解了Go语言—从基础知识到高级主题(如反射和C语言互操作)。本书通过大量示例演示了如何写出符合Go语言惯例的清晰且简单的代码;解释了可能影响程序行为的底层概念,比如指针对内存布局和垃圾回收的影响。无论你是Go语言初学者,还是经验丰富的Go语言从业人员,本书都能让你获益良多。”
—Jonathan Amsterdam,Google的Go语言团队软件工程师
“本书是一本重要的入门指南,介绍了Go语言的独特之处以及使其如此强大的设计模式和惯例代码。Jon Bodner成功地将Go语言的基本原理与语言哲学联系在一起,引导读者正确编写Go语言。”
—Robert Liebowitz,Morning Consult软件工程师
“本书不仅是Go语言的参考指南,还提供了对这门语言的惯例和实践的深刻理解。本书融入了Jon丰富的行业经验,对希望在Go语言上取得成效的人大有裨益。”
—William Kennedy,Ardan实验室管理合伙人

上架指导

计算机\程序设计

封底文字

Go语言正迅速成为构建Web服务的首选语言。尽管市面上有大量的教程向具有其他编程语言经验的开发者讲授Go语法,但要熟练掌握Go语言,这些教程远远不够,它们并没有介绍Go语言的惯例模式与编程实践。本书将指导读者学习编写清晰且符合Go语言惯例的代码所需的关键知识。
无论你的开发经验和水平如何,都将通过本书学会Go开发者的思考模式。作者Jon Bodner精心介绍了经验丰富的Go开发者所采用的设计模式,并说明了使用这些模式的理由。你还将提前了解Go即将发布的泛型特性,以及它是如何从设计到实现,一步步融入Go语言的。
通过本书,你将:
? 学习如何在Go语言中编写惯例代码并设计Go项目。
? 理解Go语言设计中的权衡。
? 学会为独立开发人员或团队构建Go语言的开发环境。
? 了解如何以及何时使用反射、unsafe和cgo。
? 探究如何利用Go语言的特性使代码高效运行。
? 了解哪些Go语言的特性应该少使用,或避免使用。
“ 本书专为开发者学习Go语言而写,达到了一种恰到好处的平衡:既很好地概述了需要了解的知识,又没有对其他语言中易于理解的概念加以重复。”
——Steve Francia
Google的Go语言产品负责人,
Hugo、Cobra和Viper的创作者
“ Go语言非常独特,即使经验丰富的程序员也必须刻意忘掉某些固有思维,以完全不同的方式思考软件。本书很好地阐述了Go语言的特性,同时指出了Go语言的惯例代码、陷阱和设计模式。”
——Aaron Schlesinger
微软高级工程师
Jon Bodner是Capital One公司的一名杰出工程师,拥有20多年的软件工程师、首席开发者和架构师工作经验。他从事过多个领域的软件开发工作,包括教育、金融、商业、医疗保健、法律、政府和互联网基础设施。

译者序

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,Third Edition,作者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领域的实践者,译本完全再现了原书的魅力,极大地开拓了我的视野,我向各位读者隆重推荐这本书。

图书目录

前言1
第1章 设置Go语言的开发环境7
1.1 安装Go工具7
1.2 Go的工作空间8
1.3 Go命令集9
1.4 分析与审查13
1.5 选择开发工具15
1.6 Makefile18
1.7 保持更新19
1.8 总结20
第2章 基础类型和变量声明21
2.1 内置类型21
2.2 var与:= 30
2.3 const关键字32
2.4 有类型的常量与无类型的常量33
2.5 未使用的变量34
2.6 常量与变量的命名35
2.7 总结37
第3章 复合类型38
3.1 数组38
3.2 切片40
3.3 字符串、字符和字节49
3.4 映射52
3.5 结构体57
3.6 总结61
第4章 代码块、影子变量和流程控制62
4.1 代码块62
4.2 if语句66
4.3 for语句67
4.4 switch语句78
4.5 默认的switch语句81
4.6 if和switch之间的选择82
4.7 goto语句83
4.8 总结85
第5章 函数86
5.1 函数的声明和调用86
5.2 函数即值92
5.3 闭包95
5.4 defer98
5.5 函数的值调用101
5.6 总结103
第6章 指针104
6.1 指针快速入门104
6.2 不畏惧指针107
6.3 指针即可变的参数109
6.4 指针作为第二选择113
6.5 指针传递可提高性能114
6.6 零值与无值114
6.7 映射与切片的区别115
6.8 切片用作缓冲区118
6.9 优化垃圾回收119
6.10 总结121
第7章 类型、方法与接口122
7.1 Go语言的类型122
7.2 方法123
7.3 使用内嵌进行组合131
7.4 内嵌不是继承132
7.5 接口概览133
7.6 接口是类型安全的鸭子类型134
7.7 内嵌与接口137
7.8 接收接口,返回结构体138
7.9 接口与nil139
7.10 空接口139
7.11 类型断言与type-switch141
7.12 谨慎使用类型断言与type-switch143
7.13 函数类型实现接口145
7.14 隐式接口实现依赖注入146
7.15 Wire150
7.16 Go并非传统意义上的面向对象语言150
7.17 总结150
第8章 错误151
8.1 如何处理错误151
8.2 使用字符串创建简单错误152
8.3 哨兵错误153
8.4 错误是值155
8.5 包装错误157
8.6 Is和As159
8.7 使用defer包装错误162
8.8 panic和recover163
8.9 从错误中获取堆栈跟踪信息165
8.10 总结165
第9章 模块、包和导入166
9.1 仓库、模块和包166
9.2 go.mod166
9.3 创建包167
9.4 模块177
9.5 模块的发布185
9.6模块的版本控制186
9.7 模块代理服务器187
9.8 总结188
第10章 Go的并发编程189
10.1 何时使用并发编程189
10.2 goroutine190
10.3 通道192
10.4 select语句194
10.5 并发实践与模式197
10.6 何时使用互斥锁211
10.7 atomic214
10.8 额外资源214
10.9 总结214
第11章 Go语言标准库215
11.1 标准io库215
11.2 time220
11.3 encoding/json222
11.4 net/http228
11.5 总结234
第12章 上下文235
12.1 什么是上下文235
12.2 取消238
12.3 计时器241
12.4 在上下文中处理取消请求243
12.5 传递值244
12.6 总结249
第13章 测试250
13.1 测试的基本知识250
13.2 表格驱动测试256
13.3 检查代码覆盖率258
13.4 基准测试261
13.5 Go中的测试桩264
13.6 httptest269
13.7 集成测试和编译标签271
13.8 使用竞争检测器检查并发问题272
13.9总结274
第14章 恶龙禁区:反射、unsafe和cgo275
14.1 在运行时使用反射处理类型275
14.2 unsafe意味着不安全289
14.3 cgo用于集成,而不是为了性能294
14.4 总结297
第15章 展望未来:Go中的泛型298
15.1 泛型减少冗余代码,提高类型安全性298
15.2 Go中的泛型300
15.3 类型列表可指定操作符305
15.4 泛型函数抽象算法306
15.5 类型列表限制常量和实现307
15.6 暂不考虑的问题310
15.7 惯例模式与泛型312
15.8 未来更多可能312
15.9 总结313

教学资源推荐
作者: (美)埃略特·阿伦森(Elliot Aronson)加利福尼亚大学圣克鲁兹分校 提摩太 D. 威尔逊(Timothy D. Wilson) 弗吉尼亚大学 罗宾 M.埃克特 (Robin M. Akert)威尔士利学院 著
作者: (美)斯潘塞 A.拉瑟斯(Spencer A. Rathus)著
作者: [美]斯特兰?奥尔松(Stellan Ohlsson)著
作者: (美) 韦恩·韦登(Wayne Weiten) 著
参考读物推荐
作者: [奥] 阿尔弗雷德?阿德勒(Alfred Adler)著
作者: [澳]迈克尔 L.弗里(Michael L.Free) 著
作者: [美] 梅根·迪瓦恩(Megan Devine) 著
作者: [美]埃德·特罗尼克(Ed Tronick),[美]克劳迪娅·M.戈尔德(Claudia M.Gold) 著