购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

前言

在第1版的前言中,我写道:

最初我想给本书取名为 Boring Go ,因为用Go语言编写程序确实很无趣……

不过,无趣并不意味着平庸。要想正确使用Go,就需要了解它的功能是如何整合在一起的。即使你能够写出看起来像Java或Python的Go代码,也并不会满足于得到的结果,并且想弄清楚所有这些特性背后的底层机制是怎么回事。这正是本书的意义所在。本书清楚地介绍了Go的特性,解释了如何才能最大限度地使用它们来编写可长期维护且符合Go语言惯例的代码。

Go仍然是一门具有少量特性的小语种。它仍然缺乏继承、面向切面编程、函数重载、操作符重载、模式匹配、命名参数、异常以及其他许多使语言复杂化的特性。那么,为什么一本关于无趣的语言的书需要更新呢?

写这个版本有几个原因。首先,就像无趣并不意味着平庸,它也并不意味着不变。在过去的3年里,出现了新的特性、工具和库,如结构化日志记录、模糊测试、工作空间和漏洞检查等改进,可帮助Go开发者创建可靠的、持久的、可维护的代码。现在,Go开发者已经对泛型有了几年的经验,标准库开始包含类型约束和泛型函数以减少重复的代码。甚至unsafe包也已经更新,使其更安全一些。Go开发者需要一些指引来理解如何最好地使用这些新特性。

其次,Go的一些方面在第1版中没有得到很好的展示。介绍章节不如我希望的那样流畅。丰富的Go工具生态系统没有被探索。第1版的读者要求有练习和额外的示例代码。本书试图解决这些问题。

最后,Go团队引入了一些令人兴奋的新东西。现在有一个策略,它允许Go保持长期软件工程项目所需的向后兼容性,同时对长期存在的设计缺陷进行破坏性改变。Go 1.22中引入的新的for循环变量范围规则是首个利用这种方法的特性。

Go仍然是无趣的,也仍然是干货满满的,并且比以往任何时候都更好。我希望你们能喜欢这第2版。

谁应该阅读这本书

本书面向那些希望学习第2种(或第5种)编程语言的开发者。重点关注的是对Go语言不熟悉的人群,从根本不知道Go语言到通过Go语言教程写过一些Go代码的人。学习Go的重点不仅仅是如何用Go语言编写程序,而是如何地道地使用Go。更有经验的Go开发者可以找到如何最好地利用该语言较新特性的建议。最重要的是,读者要学习如何编写看起来符合Go风格的代码。

我们假设读者具有使用开发者工具的经验,例如版本控制(最好是Git)和集成开发环境(IDE)。读者应该熟悉基本的计算机科学概念,如并发和抽象,因为本书会解释它们在Go中是如何工作的。一些代码示例可以从GitHub下载,更多的示例可以在The Go Playground在线尝试。尽管互联网不是必需的,但在回顾可执行示例时会有所帮助。由于Go通常用于构建和调用HTTP服务器,因此一些示例假设你熟悉基本的HTTP概念。

尽管Go的大多数特性在其他语言中也可以找到,但Go做出了不同的权衡,因此用它编写的程序可以具有不同的结构。本书从如何搭建Go开发环境开始,继而介绍变量、类型、控制结构和函数。如果你想跳过这些内容,请控制住这种冲动,花时间去看一看。通常是那些细节使你的代码更符合Go的习惯用法。一些乍一看似乎显而易见的东西,当你深入思考时会微妙地令人惊讶。

排版约定

本书中使用以下排版约定:

斜体( Italic

表示新的术语、URL、电子邮件地址、文件名和文件扩展名。

等宽字体(Constant width)

用于程序清单,以及段落中的程序元素,例如变量名、函数名、数据库、数据类型、环境变量、语句以及关键字。

等宽粗体( Constant width bold

表示应由用户直接输入的命令或其他文本。

等宽斜体( Constant width italic

表示应由用户提供的值或由上下文确定的值替换的文本。

该图示表示提示或建议。

该图示表示一般性说明。

该图示表示警告或注意。

示例代码

可以从 https://github.com/learning-go-book-2e 下载补充材料(代码示例)。

这里的代码是为了帮助你更好地理解本书的内容。通常,可以在程序或文档中使用本书中的代码,而不需要联系O'Reilly获得许可,除非需要大段地复制代码。例如,使用本书中所提供的几个代码片段来编写一个程序不需要得到我们的许可,但销售或发布O'Reilly的示例代码则需要获得许可。引用本书的示例代码来回答问题也不需要许可,将本书中的很大一部分示例代码放到自己的产品文档中则需要获得许可。

非常欢迎读者使用本书中的代码,希望(但不强制)注明出处。注明出处时包含书名、作者、出版社和ISBN,例如:

Learning Go,Second Edition ,作者Jon Bodner,由O'Reilly出版,书号978-1-098-13929-2。

如果读者觉得对示例代码的使用超出了上面所给出的许可范围,欢迎通过 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/learning-go-2ed 上列出了勘误表、示例以及其他信息。

关于书籍、课程、会议和新闻的更多信息,请访问我们的网站 https://oreilly.com

我们在LinkedIn上的地址: https://linkedin.com/company/oreilly-media

我们在Twitter上的地址: https://twitter.com/oreillymedia

我们在YouTube上的地址: https://youtube.com/oreillymedia

第2版致谢

对于本书第1版的反响,我感到受宠若惊。该书于2019年末开始创作,2020年末完成,2021年初出版。

完成后,人们问我下一本书是什么。我告诉他们,我打算好好休息一下,然后开始撰写一部言情小说。但是,在我开始书写关于海盗和公主的故事之前,惊人的事情发生了:本书获得了巨大成功。它在O'Reilly Learning上成为最热门的5本书之一,几乎持续了一年的时间。随着销量的持续增长,我发现第1版中有一些需要修正的地方,读者们也通过信件向我指出了错误和遗漏。有些问题在后续印刷中作为勘误得到修正,当我联系O'Reilly询问他们是否有兴趣推出新版时,他们表示很期待。

写作第2版是一次愉快的经历。Rita Fernando提供了指导、反馈和编辑工作。得益于Jonathan Amsterdam、Leam Hall、Katie Hockman、Thomas Hunter、Max Horstmann和Natalie Pistunovich等人的反馈,本书得到了极大的提升。Chris Hines在勘误和提出更好的例子方面做了极其细致的工作。Abby Deng和Datadog的Go书籍俱乐部成员的评论和反馈,让我能够根据Go语言新手开发者的反馈进行修改。剩下的(希望很少)错误全都是我的。

我的妻子和孩子们非常宽容,不介意我错过家庭电影之夜,而是让我琢磨如何最好地描述Go的新特性。

我还想感谢第1版读者对我表达的善意。感谢大家的支持和鼓励。

第1版致谢

写书似乎应当是一项孤独的任务,但如果没有大家的帮助,本书就不会问世。在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,以及一些编程书,这些书激发了我有朝一日自己写书的想法。

感谢你们帮助我实现了梦想。 2i6EzePJA6t1baPSB2XWjFXYalye5m/Sig5z0rS9Qg6sSssL84DQe8bCojItP0cM

点击中间区域
呼出菜单
上一章
目录
下一章
×