【English-Book】Go in Action目录页翻译中文

news2025/1/18 15:53:02

第8页

内容

前言 xi
序言 xiii
致谢 xiv
关于本书 xvi
关于封面插图 xix

1 介绍 Go 1
1.1 用 Go 解决现代编程挑战 2
开发速度 3 • 并发 3 • Go 的类型系统 5
内存管理 7
1.2 你好,Go 7
介绍 Go 玩具 8
1.3 总结 8

2 Go 快速入门 9
2.1 程序架构 10
2.2 主包 11
2.3 搜索包 13
search.go 14 • feed.go 22 • match.go/default.go 26
2.4 RSS 匹配器 32
2.5 总结 38

vii

第9页

viii 内容

3 包装和工具 39
3.1 包 40
包命名约定 40 主包 40
3.2 导入 42
远程导入 42 命名导入 43
3.3 init 44
3.4 使用 Go 工具 45
3.5 用 Go 开发者工具进一步发展 47
go vet 47 Go 格式 48 Go 文档 48
3.6 与其他 Go 开发者合作 51
为分享创建存储库 51
3.7 依赖管理 52
Vendor 依赖 52 介绍 gb 54
3.8 总结 56

4 数组、切片和映射 57
4.1 数组内部和基础 57
内部 58 声明和初始化 58 使用数组 60 多维数组 62 函数间传递数组 64
4.2 切片内部和基础 65
内部 65 创建和初始化 65 使用切片 68 多维切片 79 函数间传递切片 80
4.3 映射内部和基础 81
内部 81 创建和初始化 83 使用映射 84 函数间传递映射 86
4.4 总结 87

5 Go 的类型系统 88
5.1 用户定义的类型 89
5.2 方法 92
5.3 类型的本质 96
内置类型 96 引用类型 97 结构体类型 98

第10页

内容

5.4 接口 101
标准库 102 • 实现 104 • 方法集 105 • 多态 109

5.5 类型嵌入 111
5.6 导出和不导出标识符 119
5.7 总结 127

并发 128
6.1 并发与并行 129
6.2 Goroutine 132
6.3 竞争条件 139
6.4 锁定共享资源 142
原子函数 142 • Mutex 145
6.5 通道 147
无缓冲通道 148 • 缓冲通道 153
6.6 总结 157

并发模式 158
7.1 运行器 158
7.2 池化 167
7.3 工作 177
7.4 总结 183

标准库 184
8.1 文档和源代码 185
8.2 日志 187
日志包 187 • 自定义记录器 191 结论 195
8.3 编码/解码 196
解码 JSON 196 • 编码 JSON 201 结论 202
8.4 输入和输出 203
Writer 和 Reader 接口 203 • 一起工作 205 简单 curl 208 • 结论 210
8.5 总结 210

第11页

内容

测试和基准 211
9.1 单元测试 212
基本单元测试 212 • 表测试 216 • 模拟调用 219
测试端点 223
9.2 示例 228
9.3 基准测试 232
9.4 总结 236
索引 237

第12页

前言

在计算机科学中,当您想到杰出的人时,有几个名字会浮现在脑海中。其中就包括 Rob Pike、Robert Griesmier 和 Ken Thompson,他们创造了 UNIX、Plan 9、B、Java 的 JVM HotSpot、V8、Strongtalk、Sawzall、Ed、Acme 和 UTF8 等众多作品。2007 年,他们聚在一起,以一种非常强大的想法为实验目标,结合他们数十年的经验,创造了一种新的系统语言,这种语言借鉴了现有的语言,但确实与以前的任何语言都不同。他们将他们的创作作为开源发布,并将其命名为“Go”。如果 Go 继续沿着现在的道路发展,它可能最终证明是他们众多著名创作中最影响深远的。

当人们纯粹出于让世界变得更美好的意图而聚集在一起时,人类处于最佳状态。2013 年,Brian 和 Erik 创建了 Gopher Academy,并很快与其他几个志同道合的人一起加入,他们致力于在 Go 语言周围建立一个更好的社区。他们首先注意到社区需要一个在线聚集和分享材料的地方,于是他们设立了 Go 讨论板(slack)和 Gopher Academy 博客。随着时间的推移和社区的不断增长,他们建立了世界上第一个全球 Go 会议,GopherCon。通过他们对社区的深入了解,他们知道需要一个资源来引导成千上万的程序员进入这个新语言,因此他们开始写这本书。

这本书是 Bill、Brian 和 Erik 的心血之作,他们花了一年多的时间写作和修订,同时保持了他们现有的职责,如 Gopher Academy 博客的编辑、会议组织者、日常工作,以及作为父亲和丈夫的角色。对他们来说,这本书不仅仅是一本书,而是对他们的语言的致敬。他们不满足于写出一本“好”书。他们写了和修订了许多次,直到他们有了一个值得 Go 这种语言的书。

从第一章到最后一页,这本书都是为了引导您探索、学习和使用 Go 而精心编写的。在这个世界上,您找不到比 Bill、Brian 和 Erik 更好的向导了。我期待着您发现 Go 的美好,并希望在在线和 Go 会议和会议上见到您。

STEVE FRANCIA
GOPHER 和 HUGO、COBRA、VIPER 和 SPF13-VIM 的创建者

第13页

序言

2013 年 10 月,在写了 GoingGo.net 博客几个月后,我收到了 Brian Ketelsen 和 Erik St. Martin 的电话。他们正在写这本书,并问我是否愿意参与其中。我抓住了这个机会,开始写作。当时我对 Go 还很陌生,所以这是一个学习这门语言、与 Brian 和 Erik 一起工作并以更大规模分享我所学到的知识的绝佳机会。

在完成了前四章后,我们将其发布到 Manning 早期访问计划(MEAP)。不久之后,我们收到了语言团队成员的电子邮件。这个人提供了详细的更改清单,其中包括大量知识、建议、鼓励和支持。从那时起,我们决定从头重写第 2 章,并对第 4 章进行了重大改造。我们了解到,重写章节将不是例外,而是常态。这次经历还教会我们,写这本书需要社区的帮助,而且我们必须立即让它发生。

从那时起,这本书就成了社区的努力。我们尽力在研究每一章、开发代码示例以及与社区审查、讨论和编辑材料和代码方面投入适当的时间。我们尽最大努力确保这本书在技术上是正确的,只显示惯用的代码,并以社区认为应该编写和思考 Go 的方式教授 Go。我们也有自己的想法、实践和准则洒在其中。

希望这本书能帮助您学习 Go,并且您会发现它是一个今天和未来多年的有用资源。Brian、Erik 和我总是在线并随时准备帮助任何联系我们的读者。如果您购买了这本书,感谢您,并且不要害羞地说“你好。”

WILLIAM KENNEDY

第14页

致谢

我们花了超过 18 个月来写这本书,但没有许多人的支持,我们的努力是不可能实现的——我们的家人、朋友、同事和导师;整个 Go 社区;以及我们的出版商 Manning。

当您编写像这样的书籍时,您需要一位不仅分享好的,而且在需要时帮助您度过难关并始终陪伴您的编辑。Jennifer Stout,感谢您的一切,以及在我们最需要的时候陪伴我们。感谢您让这本书成为现实。还要感谢 Manning 在开发和制作我们的书时与我们合作的其他所有人。

您不可能知道所有事情,因此需要一个社区的人来花时间和知识。感谢 Go 社区以及参与审查和在开发过程中提供反馈的人,特别是在各个阶段的稿件中提供反馈的人,尤其是 Adam McKay, Alex Basile, Alex Jacinto, Alex Vidal, Anjan Bacchu, Benoît Benedetti, Bill Katz, Brian Hetro, Colin Kennedy, Doug Sparling, Jeffrey Lim, Jesse Evans, Kevin Jackson, Mark Fisher, Matt Zulak, Paulo Pires, Peter Krey, Philipp K. Janert, Sam Zaydel 和 Thomas O’Rourke。还要感谢 Jimmy Frasché 在最终稿件进入生产前对其进行的技术审查。

有几个人需要特别承认。

Kim Shrier 从一开始就在那里,提供评论,并花时间教我们。我们从您那里学到了很多东西,非常感谢您。这本书在技术上因您而更加出色。

Bill Hathaway 在编写这本书的最后一年中发挥了重要作用,塑造了每一章;他的想法和意见非常宝贵。我们必须承认 Bill 是第 9 章的合著者。没有 Bill 的时间和才能,它就不存在了。

第15页

还要特别感谢 Cory Jacobson, Jeffery Lim, Chetan Conikee 和 Nan Xiao,他们一直提供时间进行审查、意见和指导。

感谢 Gabriel Aszalos, Fatih Arslan, Kevin Gillette 和 Jason Waldrip 帮助编写示例代码和进行审查。还要特别感谢 Steve Francia 撰写前言并支持我们的工作。

最后,我们衷心感谢我们的家人和朋友。任何需要这种承诺和时间的事情总是会对您所爱的人产生影响。

WILLIAM KENNEDY

我希望感谢我的妻子 Lisa 和我的五个孩子:Brianna, Melissa, Amanda, Jarrod 和 Thomas。Lisa,我知道您和孩子们在编写这本书的那些日子里、夜晚和周末里没有花太多时间在丈夫和父亲身上。感谢您让我花这么多时间来编写书籍:我爱你们每一个人。

还要感谢我的商业合作伙伴 Ed Gonzalez,创意总监 Erick Zelaya 以及 Ardan Studios 的整个团队。Ed,感谢您从一开始就支持我。没有您,我做不到。您不仅是商业合作伙伴,更是朋友和兄弟:谢谢。Erick,感谢您为支持我和公司所做的一切。不知道没有您该怎么办。

BRIAN KETELSEN

我希望感谢我的家人在这长达四年之久的过程中耐心地生产这本书。Christine, Nathan, Lauren 和 Evelyn:感谢您在编写章节时让我在泳池边的躺椅上消磨时间,而您在游泳。感谢您相信这本书能够出版。

ERIK ST. MARTIN

我希望感谢我的未婚妻 Abby 以及我的三个孩子 Halie, Wyatt 和 Allie,感谢他们在编写书籍和组织会议期间表现出如此的耐心和理解。编写书籍和组织会议需要很多时间,我非常幸运能有他们。

还要感谢 Bill Kennedy,他投入了巨大的努力来编写这本书——我们请他来帮助我们编写这本书,而由于工作需求和组织 GopherCon,他大部分时间都掌舵了。我也想感谢社区对我们的审查和鼓励的话语。

第16页

关于本书

Go 是一种开源编程语言,它使构建简单、可靠和高效软件变得容易。虽然它借鉴了现有语言的想法,但其独特而简洁的性质使 Go 程序在字符上不同于用其他语言编写的程序。它在低级系统语言的功能和现代语言今天看到的一些高级功能之间取得了平衡。这创造了编程环境,您可以在其中编写更少的代码并完成更多的工作。

谁应该阅读这本书?

本书专为具有其他编程语言经验的中级开发人员编写,他们想学习 Go。编写本书的目的是为您提供一种密集的、全面的和惯用的 Go 语言视图。我们专注于语言的规格和实现,包括从语言语法、Go 的类型系统、并发、通道、测试等广泛的主题。我们相信这本书对于任何想快速入门学习 Go 的人,以及那些希望对语言及其内部有更深入理解的人都是完美的。

路线图

本书包含九章,简要描述如下:

  • 第 1 章是对语言的快速介绍,介绍语言的创建及其解决的问题。它还简要介绍了 Go 的一些核心概念,如并发。

xvi

第17页

关于本书

■ 第 2 章引导您完成一个完整的 Go 程序,在此过程中教您 Go 提供的所有内容。

■ 第 3 章介绍包的概念,以及如何最佳地设置您的 Go 工作区和开发环境。它还展示了如何使用 Go 工具,包括获取和构建代码。

■ 第 4 章详细介绍了 Go 的内置数据类型:数组、切片和映射。它解释了这些数据结构的实现和机制。

■ 第 5 章详细介绍了 Go 的类型系统,从结构体类型到命名类型到接口和类型嵌入。它还介绍了所有这些内容如何结合在一起,使您能够以更简单的方式构建和编写复杂软件。

■ 第 6 章深入探讨了 Go 调度程序、并发和通道的工作原理。它教您该语言并发机制的机制。

■ 第 7 章利用第 6 章中学到的内容,展示了更多关于并发模式的实用代码。您将学习如何实现 goroutine 池来管理工作,以及如何池化可重用资源以供共享。

■ 第 8 章探讨标准库,并深入研究三个包:log、json 和 io。该章重点介绍这些包的一些细微之处。

■ 第 9 章通过展示如何使用测试和基准框架来结束本书。您将学习如何编写单元测试和表测试以及基准测试,并如何将示例添加到文档中,并将示例用作测试。

关于代码

书中所有源代码都以等宽字体突出显示,例如这样,这使其与周围的文本区分开来。在许多清单中,代码都有注释,指出关键概念,并在文本中使用编号项目符号来提供有关代码的其他信息。

本书中示例的源代码可以从出版社网站 www.manning.com/books/go-in-action 和 GitHub https://github.com/goingaction/code 下载。

作者在线

购买 Go in Action 包括对 Manning Publications 管理的私人网络论坛的免费访问,您可以在其中对书籍发表评论、提出技术问题并从作者和其他用户那里获得帮助。要访问论坛并订阅它,请将 web 浏览器指向 www.manning.com/books/go-in-action。此页面将告诉您如何在注册后访问论坛,可以获得什么样的帮助,以及论坛中的行为准则。

第18页

关于本书

Manning 对读者的承诺是提供一个有意义的对话可以发生的论坛,其中个人读者和读者与作者之间的对话可以进行。这不是对作者特定数量的参与的承诺,作者对 AO 的贡献仍然是自愿的(和无偿的)。我们建议您向作者提出有挑战性的问题,以免他们的兴趣转移。

作者在线论坛和以前讨论的存档将一直可供访问,直到书籍脱销。

关于作者

WILLIAM KENNEDY (@goinggodotnet) 是一家位于迈阿密的移动、网络和系统开发公司 Ardan Studio 的管理合伙人。他还是 GoingGo.Net 博客的作者,以及迈阿密 Go 见面会的组织者。Bill 专注于通过他的培训公司 Ardan Labs 进行 Go 教育。他经常可以在会议和 hangouts 上进行演讲和研讨会。他总是抽出时间与那些希望将他们的 Go 知识、博客和编码技能提升到更高层次的个人和团体合作。

BRIAN KETELSEN (@bketelsen) 是 XOR Data Exchange 的 CIO 和联合创始人。Brian 是 GopherCon(年度 Go 会议)的联合组织者,也是 GopherAcademy(致力于 Go 语言推广和 Go 开发者教育的社区导向组织)的创始人。他从 2010 年开始使用 Go。

ERIK ST. MARTIN (@erikstmartin) 是位于德克萨斯州奥斯汀的大型数据和分析公司 XOR Data Exchange 的软件开发总监,但居住在坦帕,佛罗里达州。Erik 是开源和其社区的长期贡献者。他是 GopherCon(年度 Go 会议)的组织者,以及 Go 坦帕见面会的组织者。他对 Go 和社区充满热情,并热衷于寻找新的方法来促进其增长。

第19页

关于本书

Manning 对读者的承诺是提供一个有意义的对话可以发生的论坛,其中个人读者和读者与作者之间的对话可以进行。这不是对作者特定数量的参与的承诺,作者对 AO 的贡献仍然是自愿的(和无偿的)。我们建议您向作者提出有挑战性的问题,以免他们的兴趣转移。

作者在线论坛和以前讨论的存档将一直可供访问,直到书籍脱销。

关于作者

WILLIAM KENNEDY (@goinggodotnet) 是一家位于迈阿密的移动、网络和系统开发公司 Ardan Studio 的管理合伙人。他还是 GoingGo.Net 博客的作者,以及迈阿密 Go 见面会的组织者。Bill 专注于通过他的培训公司 Ardan Labs 进行 Go 教育。他经常可以在会议和 hangouts 上进行演讲和研讨会。他总是抽出时间与那些希望将他们的 Go 知识、博客和编码技能提升到更高层次的个人和团体合作。

BRIAN KETELSEN (@bketelsen) 是 XOR Data Exchange 的 CIO 和联合创始人。Brian 是 GopherCon(年度 Go 会议)的联合组织者,也是 GopherAcademy(致力于 Go 语言推广和 Go 开发者教育的社区导向组织)的创始人。他从 2010 年开始使用 Go。

ERIK ST. MARTIN (@erikstmartin) 是位于德克萨斯州奥斯汀的大型数据和分析公司 XOR Data Exchange 的软件开发总监,但居住在坦帕,佛罗里达州。Erik 是开源和其社区的长期贡献者。他是 GopherCon(年度 Go 会议)的组织者,以及 Go 坦帕见面会的组织者。他对 Go 和社区充满热情,并热衷于寻找新的方法来促进其增长。

第20页

关于封面插图

Go in Action 封面上的图 captioned “Man from the East Indies。” 这幅图取自 Thomas Jefferys 的 A Collection of the Dresses of Different Nations, Ancient and Modern(四卷),伦敦,1757 年至 1772 年间出版。标题页说明这些是手工着色的铜版画,用阿拉伯树胶增强。Thomas Jefferys (1719–1771) 被称为“George III 的地理学家。” 他是英国制图师,是当时领先的地图供应商。他为政府和其他官方机构雕刻和印刷地图,并制作了大量商业地图和地图集,特别是关于北美的。

他对当地服饰习俗的兴趣源于他作为地图制图师和调查者的日常工作。他的作品生动地展示了当时世界各国人民的服饰多样性。旅行的乐趣和对遥远土地的着迷是 18 世纪末的新现象,像这样的收藏很受欢迎,向游客和客厅旅行者介绍了其他国家的居民。

两百多年前,世界各国民众的服饰习俗是如此丰富多样。如今,随着文化视觉多样性的减少,或许我们可以乐观地认为,我们已经用更丰富多样的个人生活或更丰富多样的智力和技术生活来交换了这种多样性。

在计算机书籍难以区分的今天,Manning 通过取材于两百年前地区生活的丰富多样性,庆祝计算机业务的发明和首创精神,使封面插图焕发了生机。

xix

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2278532.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot全局异常处理示例

这种错误交给前端无法处理。 需要自定义一些错误响应类给前端 package cn.yam.bloomfilter.exception;import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.ht…

Windows远程桌面网关出现重大漏洞

微软披露了其Windows远程桌面网关(RD Gateway)中的一个重大漏洞,该漏洞可能允许攻击者利用竞争条件,导致拒绝服务(DoS)攻击。该漏洞被标识为CVE-2025-21225,已在2025年1月的补丁星期二更新中得到…

Shell正则表达式与文本处理三剑客(grep、sed、awk)

一、正则表达式 Shell正则表达式分为两种: 基础正则表达式:BRE(basic regular express) 扩展正则表达式:ERE(extend regular express),扩展的表达式有、?、|和() 1.1 基本正则表…

基于 Spring Boot 和 Vue.js 的全栈购物平台开发实践

在现代 Web 开发中,前后端分离的架构已经成为主流。本文将分享如何使用 Spring Boot 和 Vue.js构建一个全栈购物平台,涵盖从后端 API 开发到前端页面实现的完整流程。 1. 技术栈介绍 后端技术栈 JDK 1.8:稳定且广泛使用的 Java 版本。 Spring…

Golang Gin系列-3:Gin Framework的项目结构

在Gin教程的第3篇,我们将讨论如何设置你的项目。这不仅仅是把文件扔得到处都是,而是要对所有东西的位置做出明智的选择。相信我,这些东西很重要。如果你做得对,你的项目会更容易处理。当你以后不再为了找东西或添加新功能而绞尽脑…

网络编程-UDP套接字

文章目录 UDP/TCP协议简介两种协议的联系与区别Socket是什么 UDP的SocketAPIDatagramSocketDatagramPacket 使用UDP模拟通信服务器端客户端测试 完整测试代码 UDP/TCP协议简介 两种协议的联系与区别 TCP和UDP其实是传输层的两个协议的内容, 差别非常大, 对于我们的Java来说, …

3.数据库系统

3.1数据库的基本概念 3.1.1:数据库体系结构 3.1.1.1集中式数据库系统 数据是集中的 数据管理是集中的 数据库系统的素有功能(从形式的用户接口到DBMS核心)都集中在DBMS所在的计算机 3.1.1.2C/S结构 客户端负责数据表示服务服务器主要负责数据库服务 数据库系统分为前端和后端…

探索 Transformer²:大语言模型自适应的新突破

目录 一、来源: 论文链接:https://arxiv.org/pdf/2501.06252 代码链接:SakanaAI/self-adaptive-llms 论文发布时间:2025年1月14日 二、论文概述: 图1 Transformer 概述 图2 训练及推理方法概述 图3 基于提示的…

【北京迅为】iTOP-4412全能版使用手册-第八十七章 安装Android Studio

iTOP-4412全能版采用四核Cortex-A9,主频为1.4GHz-1.6GHz,配备S5M8767 电源管理,集成USB HUB,选用高品质板对板连接器稳定可靠,大厂生产,做工精良。接口一应俱全,开发更简单,搭载全网通4G、支持WIFI、蓝牙、…

LDD3学习8--linux的设备模型(TODO)

在LDD3的十四章,是Linux设备模型,其中也有说到这个部分。 我的理解是自动在应用层也就是用户空间实现设备管理,处理内核的设备事件。 事件来自sysfs和/sbin/hotplug。在驱动中,只要是使用了新版的函数,相应的事件就会…

Jira中bug的流转流程

Jira中bug的状态 1. 处理Bug的流程2. bug状态流转详述bug的状态通常包括 1. 处理Bug的流程 2. bug状态流转详述 bug的状态通常包括 未解决 1. 测试人员创建一个bug,填写bug的详细信息,如概要、bug级别、复现步骤、现状、预期结果等 2. 定位bug&#x…

解决关于Xcode16提交审核报错

# 问题描述 The following issues occurred while distributing your application. Asset validation failed Invalid Executable. The executable xxx.app/Frameworks/HappyDNS.framework/HappyDNS contains bitcode.(lD:ef5dd249-731f-4731-8173-8e4a12519352) Asset valida…

windows下安装并使用node.js

一、下载Node.js 选择对应你系统的Node.js版本下载 Node.js官网下载地址 Node.js中文网下载地址??? 这里我选择的是Windows64位系统的Node.js20.18.0(LTS长期支持版本)版本的.msi安装包程序 官网下载: 中文网下载: 二、安…

基于SpringBoot+Vue旅游管理系统的设计和实现(源码+文档+部署讲解)

个人名片 🔥 源码获取 | 毕设定制| 商务合作:《个人名片》 ⛺️心若有所向往,何惧道阻且长 文章目录 个人名片环境需要技术栈功能介绍功能说明 环境需要 开发语言:Java 框架:springboot JDK版本:JDK1.8 数据库&…

python之二维几何学习笔记

一、概要 资料来源《机械工程师Python编程:入门、实战与进阶》安琪儿索拉奥尔巴塞塔 2024年6月 点和向量:向量的缩放、范数、点乘、叉乘、旋转、平行、垂直、夹角直线和线段:线段中点、离线段最近的点、线段的交点、直线交点、线段的垂直平…

RabbitMQ---消息确认和持久化

(一)消息确认 1.概念 生产者发送消息后,到达消费端会有以下情况: 1.消息处理成功 2.消息处理异常 如果RabbitMQ把消息发送给消费者后就把消息删除,那么就可能会导致,消息处理异常想要再获取这条消息的时…

map和set c++

关联式容器也是⽤来存储数据的,与序列式容器不同的是,关联式容器逻辑结构通常是⾮线性结构,两个位置有紧密的关联关系,交换⼀下,他的存储结构就被破坏了。顺序容器中的元素是按关键字来保存和访问的。关联式容器有map/…

turtle教学课程课堂学习考试在线网站

完整源码项目包获取→点击文章末尾名片!

Digital Document System (DDS)

Digital Document System (DDS) 数字档案平台 信息注入

Springer Nature——Applied Intelligence 投稿指南

投稿系统:Editorial Manager (Manuscript and Peer Review) : 使用Editorial Manager 投稿系统的期刊列表:期刊列表 期刊主页:Spring Nature 主页 投稿主页:Spring Nature Submit SystemSubmission Guidelines: Official Submissi…