【现货速发】Go程序设计语言(英文版)
全新正版书籍,24小时发货,可开发票。
¥
40.7
5.2折
¥
79
全新
库存8件
作者艾伦
出版社机械工业出版社
ISBN9787111526285
出版时间2022-04
装帧平装
开本16开
定价79元
货号23895617
上书时间2024-11-24
商品详情
- 品相描述:全新
- 商品描述
-
前言
前 言“Go是一种开放源代码的程序设计语言,它意在使得人们能够方便地构建简单、可靠、高效的软件。”(来自Go官网golang.org)Go形成构想是在2007年9月,并于2009年11月发布,其发明人是Robert Griesemer、Rob Pike和Ken Thompson,这几位都任职于Google。该语言及其配套工具集意在使得编译和执行都能够富有表达力和效率,而且使得程序员能够轻松写出可靠、健壮的程序。
Go和C从表面上看起来相似,而且和C一样,它也是一种专业程序员使用的工具,兼有事半功倍之效。但是Go远不止是C的一种升级版本。它从多种其他语言中借用和改造了不少好的思想,还避开了那些导致复杂和脆弱的语言特性。它为并发提供的设施是全新的、高效的,它实现数据抽象和面向对象的途径是极其灵活的。它还提供了自动化的内存管理,或称为垃圾收集。
Go特别适用于构建基础设施类软件(如网络服务器),以及程序员使用的工具和系统等。但它的的确确是一种通用语言,而且在诸多领域(如图像处理、移动应用和机器学习)中都能发现它的身影。它在很多场合下被用于替换无类型的脚本语言,这是由于它平衡了表达力和安全性:Go程序通常比动态语言程序运行速度要快,遭遇意料之外的类型错误而导致的崩溃更是少得多。
Go是个开源项目,所以其编译器、库和工具的源代码是所有人皆可免费取得的。来自全世界的社区都在积极地向这个项目贡献代码。Go的运行环境包括类UNIX系统—Linux、FreeBSD、OpenBSD和Mac OS X,还有Plan 9和Microsoft Windows。只要在这些环境之一中写了一个程序,那么基本上不加修改就可以运行在其他环境中。
本书旨在帮助你立刻开始使用Go,以及良好地掌握这门语言,并充分地利用Go的语言特性和标准库来撰写清晰的、符合习惯用法的、高效的程序。
Go的起源和生物学物种一样,成功的语言会繁衍后代,这些后代语言会从它们的祖先那里汲取各种优点;有时候,语言间的混血会产生异常强大的力量;在一些罕见情况下,某个重大的语言特性也可能凭空出现而并无先例。通过考察语言间的影响,我们可以学得不少知识,比如语言为什么会变成这个样子,以及它适配过哪些环境,等等。
下图展示了更早出现的程序设计语言对Go产生的 重要影响。
Go有时会被称为“类C语言”或“21世纪的C”。从C中,Go继承了表达式语法、控制流语句、基本数据类型、按值调用的形参传递、指针,但比这些更重要的是,继承了C所强调的程序要编译成高效的机器码,并自然地与所处的操作系统提供的抽象机制相配合。
可是,Go的家谱中还有其他祖先。产生主要影响的是来自Niklaus Wirth设计的、以Pascal为发端的一个语言支流。Modula-2启发了包概念。Oberon消除了模块接口文件和模块实现文件的区隔。Oberon-2影响了包、导入和声明语法。Object Oberon则提供了方法声明语法。
另一支Go的世系祖先,也是使得Go相对于当下的程序设计显得卓然不群者,是一族名不见经传的、在贝尔实验室开发的研究用语言。这些语言都受到了Tony Hoare于1978年发表的关于并发性基础的开创性论文所提出的通信顺序进程(Communicating Sequential Process,CSP)的启发。在CSP中,程序就是一组无共享状态进程的并行组合,进程间的通信和同步采用信道完成。不过,Hoare提出的CSP是一种形式语言,仅用以描述并发性的基本概念,并不是一种用来撰写可执行程序的程序设计语言。
Rob Pike等人开始动手做一些实验,尝试把CSP实现为真正的语言。种这样的语言称为Squeak(“和鼠类沟通的语言”),它是一种用以处理鼠标和键盘事件的语言。紧接着它的是Newsqueak,它带来的是类C的语句和表达式语法,以及类Pascal的类型记法。它是一种纯粹的函数式语言,带有垃圾收集,同样也以管理键盘、鼠标和窗口事件为目标。信道成了一等值(first-class value),它可以动态创建并采用变量存储。
Plan 9操作系统将这些思想都纳入了一种称为Alef的语言。Alef尝试将Newsqueak改造成一种可用的系统级程序设计语言,但垃圾收集的缺失使得它在处理并发性时太过痛苦了。
Go中的其他结构也会在这里或那里显示出某些并非来自祖先的基因。例如,iota多多少少有点APL的影子,而嵌套函数的词法作用域则来自Scheme(以及由之而来的大部分语言)。在Go语言中,也可以发现全新的变异。Go的创新性的切片为动态数组提供了高效的随机访问的同时,也允许旧式链表的复杂共享机制。还有,defer语句也是Go中新引入的。
Go项目所有的程序设计语言都反映了其发明者的程序设计哲学,这其中往往有相当大的一部分是对于此前的语言已知缺点的应对措施。Go这个项目也是诞生于挫败感之中的,这种挫败感来源于Google的若干遭遇了复杂性爆炸性增长的软件系统。(而这个问题绝非Google所独有的。)“复杂性是以乘积方式增长的。”Rob Pike如是说。为了修复某个问题,一点点地将系统的某个部分变得更加复杂,这不可避免地也给其他部分增加了复杂性。在不断要求增加系统功能和选项以及配置,还要快速发布的压力之下,简单性往往被忽视了—尽管长期来看,简单性才是好软件的不
导语摘要
Go语言是谷歌推出的一种全新的C语言风格的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性,提高编程效率,适合开发大型软件,有望成为主流的编程语言。本书由《C程序设计语言》的作者Kernighan和谷歌公司Go团队合作编写而成,是关于Go语言编程的权威著作。
作者简介
布莱恩W.柯尼汉(BrianW.Kerrlighan)普林斯顿大学计算机科学系教授。他是《C程序设计语言》的作者之一,与C语言的发明人DennisRitctlie共同合作了这本书。1969~2000年期间,他是贝尔实验室计算机科学研究中心技术团队的成员,与LJNIX的创造者KerlThompsorl以及DenrIisRitcl"Iie一起工作,同时他也是开发LJNIX的主要贡献者。他是AWK和AMPt一编程语言的作者之一,AWK中的K说的就是Kerrdghan。他还是《程序设计实践》的合著者之一。
艾伦A.A.多诺万(AlarlA.A.Donovarl)谷歌公司Go开发团队成员。他拥有剑桥大学和麻省理工学院计算机科学学位,从1996年开始就在工业界从事软件研发和编程工作。2005年起,他开始在谷歌公司工作,从事基础架构项目研发。是谷歌软件构建工具Blaze的联合设计师。他还创建了用于Go程序静态分析的许多库和工具。包括oracle、godoc-analysis、eg和gorename
目录
目 录
第1章 综述1
1.1 Hello,World1
1.2 命令行参数4
1.3 查找重复行8
1.4 GIF动画13
1.5 获取一个URL15
1.6 并发获取多个URL17
1.7 实现一个Web服务器19
1.8 杂项23
第2章 程序结构27
2.1 名字27
2.2 声明28
2.3 变量30
2.4 赋值36
2.5 类型声明39
2.6 包和文件41
2.7 作用域45
第3章 基本数据类型51
3.1 整数51
3.2 浮点数56
3.3 复数61
3.4 布尔量63
3.5 字符串64
3.6 常量75
第4章 复合类型81
4.1 数组81
4.2 切片84
4.3 键值对93
4.4 结构体99
4.5 JSON107
4.6 文本和HTML模板113
第5章 函数119
5.1 函数声明119
5.2 递归121
5.3 多返回值124
5.4 错误127
5.5 作为值的函数132
5.6 匿名函数135
5.7 变参函数142
5.8 延后函数调用143
5.9 崩溃148
5.10 恢复151
第6章 方法155
6.1 方法声明155
6.2 带有指针接收器的方法158
6.3 包含嵌入结构体的复合类型161
6.4 作为值和表达式的方法164
6.5 示例:位向量类型165
6.6 封装168
第7章 接口171
7.1 作为规约的接口171
7.2 接口类型174
7.3 接口约定的达成175
7.4 使用flag.Value进行标志位分析179
7.5 作为值的接口181
7.6 使用sort.Interface进行排序186
7.7 http.Handler接口191
7.8 错误接口196
7.9 示例:表达式评估器197
7.10 类型断言205
7.11 使用类型断言分辨错误206
7.12 使用接口类型断言查询行为208
7.13 按类型的程序分支210
7.14 示例:基于标记符号的XML解码213
7.15 几句建议216
第8章 goroutine和信道217
8.1 goroutine217
8.2 示例:并发时钟服务器219
8.3 示例:并发回声服务器222
8.4 信道225
8.5 并行循环234
8.6 示例:并发Web爬虫239
8.7 使用select实现多工244
8.8 示例:并发目录遍历247
8.9 取消执行251
8.10 示例:聊天服务器253
第9章 使用共享变量实现并发257
9.1 竞险257
9.2 互斥量:sync.Mutex262
9.3 读写互斥量:sync.RWMutex266
9.4 内存同步267
9.5 缓式初始化:sync.Once268
9.6 竞险检测器271
9.7 示例:并发无阻塞式高速缓存272
9.8 goroutine和线程280
第10章 包和go工具283
10.1 概述283
10.2 导入路径284
10.3 包声明285
10.4 导入声明285
10.5 空导入286
10.6 包和命名289
10.7 go工具290
第11章 测试301
11.1 go test工具302
11.2 测试函数302
11.3 覆盖率318
11.4 性能基准函数321
11.5 性能剖析323
11.6 示例函数326
第12章 反射329
12.1 为什么会引入反射概念329
12.2 reflect.Type和reflect.Value330
12.3 递归值输出Display333
12.4 示例:对S-表达式编码338
12.5 使用reflect.Value给变量设置值341
12.6 示例:对S-表达式解码344
12.7 访问结构体域标签348
12.8 列出类型的方法351
12.9 几句忠告352
第13章 低阶程序设计353
13.1 unsafe.Sizeof、Alignof和Offsetof354
13.2 unsafe.Pointer356
13.3 示例:深等价358
13.4 使用cgo调用C代码361
13.5 再来几句忠告366
1. Tutoria 1
1.1. Hello, World1
1.2.?Command?L?ineArguments?4
1.3.?FindingDup?lic?ateLines?8
1.4.?Animated?GIFs?13
1.5.?FetchingaURL?15
1.6.?FetchingURLs?Con?cur?rently17
1.7.?AWe?bServer?19
1.8.?Loose?End?s232.?
2.?ProgramStr?ucture27
2.1.?Names?27
2.2.?Declarat?ions?28
2.3.?Var?iables?30
2.4.?Assig?nments?36
2.5.?Typ?eDecl?arat?ions?39
2.6.?Packages?andFiles?41
2.7.?Scope?45
3.?Basic?Data?Typ?es51
3.1.?Int?egers?51
3.2.?Float?ing?Point?Numbers?56
3.3.?Complex?Numbers?61
3.4.?Boole?ans63
3.5.?Str?ings64
3.6.?Con?stants75
4.?Com?positeTyp?es81
4.1.?Arrays?81
4.2.?Slices?84
4.3.?Maps?93
4.4.?Str?ucts99
4.5.?JSON107
4.6.?Text?andHTMLTempl?ates113
5.?Func?tions?119
5.1.?FunctionDeclarat?ions?119
5.2.?Rec?ursio 121
5.3..MultipleReturn Values.124
5.4..Errors 127
5.5..FunctionValues.132
5.6..Anonymous Functions.135
5.7..Variadic.Functions.142
5.8..Deferred.FunctionCalls 143
5.9..Panic.148
5.10..Recover 151
6..Methods 155
6.1..Method.Declarations.155
6.2..MethodswithaPointerReceiver 158
6.3..ComposingTypesby.Struct.Embedding 161
6.4..Method.Values.andExpressions.164
6.5..Example:.Bit.Vector.Type 165
6.6..Encapsulation 168
7..Interfaces 171
7.1..Interfaces.as.Contracts 171
7.2..Interface.Types 174
7.3..Interface.Satisfaction 175
7.4..ParsingFlags.withflag.Value 179
7.5..Interface.Values.181
7.6..Sortingwithsort.Interface 186
7.7..The http.Handler Interface.191
7.8..The error Interface.196
7.9..Example:.ExpressionEvaluator 197
7.10..Type Assertions.205
7.11..D
内容摘要
Go语言是谷歌推出的一种全新的C语言风格的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性,提高编程效率,适合开发大型软件,有望成为主流的编程语言。本书由《C程序设计语言》的作者Kernighan和谷歌公司Go团队合作编写而成,是关于Go语言编程的权威著作。
— 没有更多了 —
以下为对购买帮助不大的评价