×
超值优惠券
¥50
100可用 有效期2天

全场图书通用(淘书团除外)

关闭
暂无评论
图文详情
  • ISBN:9787111703839
  • 装帧:一般胶版纸
  • 册数:暂无
  • 重量:暂无
  • 开本:16开
  • 页数:336
  • 出版时间:2022-05-01
  • 条形码:9787111703839 ; 978-7-111-70383-9

本书特色

适读人群 :Go语言初学者以及中级水平的开发人员Go语言正迅速成为构建Web服务的优选语言。尽管市面上有大量的教程向具有其他编程语言经验的开发者讲授Go语法,但要熟练掌握Go语言,这些教程远远不够,它们并没有介绍Go语言的惯例模式与编程实践。本书将指导读者学习编写清晰且符合Go语言惯例的代码所需的关键知识。 无论你的开发经验和水平如何,都将通过本书学会Go开发者的思考模式。作者Jon Bodner精心介绍了经验丰富的Go开发者所采用的设计模式,并说明了使用这些模式的理由。你还将提前了解Go即将发布的泛型特性,以及它是如何从设计到实现,一步步融入Go语言的。 通过本书,你将:学习如何在Go语言中编写惯例代码并设计Go项目。理解Go语言设计中的权衡。学会为独立开发人员或团队构建Go语言的开发环境。了解如何以及何时使用反射、unsafe和cgo。探究如何利用Go语言的特性使代码高效运行。了解哪些Go语言的特性应该少使用,或避免使用。

内容简介

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

目录

第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

展开全部

节选

【译者序】 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语言的设计哲学和无穷魅力。我们三人在近半年的翻译中倾注了很多心血,希望尽*大的努力将本书的所有精华都展现给读者,以帮助更多的朋友从中受益。尽管如此,仍难免有疏漏或者不尽如人意之处,敬请广大读者不吝斧正。杨波 【推荐序:**篇:开启第二编程语言之旅】 沈淦 有赞技术副总裁 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领域的实践者,译本完全再现了原书的魅力,极大地开拓了我的视野,我向各位读者隆重推荐这本书。

作者简介

Jon Bodner是Capital One公司的一名杰出工程师,拥有20多年的软件工程师、首席开发者和架构师工作经验。他从事过多个领域的软件开发工作,包括教育、金融、商业、医疗保健、法律、政府和互联网基础设施。

预估到手价 ×

预估到手价是按参与促销活动、以最优惠的购买方案计算出的价格(不含优惠券部分),仅供参考,未必等同于实际到手价。

确定
快速
导航