新書推薦:
《
分析性一体的涌现:进入精神分析的核心
》
售價:NT$
556.0
《
火枪与账簿:早期经济全球化时代的中国与东亚世界
》
售價:NT$
352.0
《
《全面与进步跨太平洋伙伴关系协定》国有企业条款研究
》
售價:NT$
449.0
《
银行业架构网络BIAN(全球数字化时代金融服务业框架)(数字化转型与创新管理丛书)
》
售價:NT$
449.0
《
金托邦:江湖中的沉重正义
》
售價:NT$
275.0
《
易经今解:释疑·解惑·见微
》
售價:NT$
403.0
《
东欧史(全二册)-“中间地带”的困境
》
售價:NT$
1010.0
《
虚拟资本:金融怎样挪用我们的未来
》
售價:NT$
352.0
|
編輯推薦: |
《精通Go语言(第2版)》旨在帮助读者成为一名更加优秀的Go语言开发者。
本书涵盖了许多令人激动的主题,包括与Go语言机器学习相关的新增章节,以及与Viper和Cobra Go包、gRPC、Docker镜像协同操作、YAML文件协同操作、go/scanner和go/token包协同操作、从Go语言中生成WebAssembly代码相关的信息和示例。
本书适用于希望进一步提升编程水平的中级Go程序员和Go语言编程爱好者;此外,本书也适用于具有一定编程经验的使用其他语言的开发人员,他们希望了解Go语言,但并不打算从for循环开始从头学起。
|
內容簡介: |
《精通Go语言(第2版)》详细阐述了与Go语言相关的基本解决方案,主要包括Go语言和操作系统,理解Go语言的内部机制,处理Go语言中的基本数据类型,组合类型的使用,利用数据结构改进Go代码,Go包和函数,反射和接口,UNIX系统编程,Go语言中的并发编程—协程、通道和管道,Go语言的并发性—高级话题,代码测试、优化和分析,网络编程基础知识,网络编程—构建自己的服务器和客户端,Go语言中的机器学习等内容。此外,本书还提供了相应的示例、代码,以帮助读者进一步理解相关方案的实现过程。 本书适合作为高等院校计算机及相关专业的教材和教学参考书,也可作为相关开发人员的自学用书和参考手册。
|
目錄:
|
第1部分
第1章 Go语言和操作系统 3
1.1 Go语言的历史 3
1.2 Go语言的未来 4
1.3 Go语言的优点 4
1.3.1 Go语言是否完美 5
1.3.2 预处理器 5
1.3.3 godoc实用程序 6
1.4 编译Go代码 7
1.5 执行Go代码 8
1.6 两条Go语言规则 8
1.7 下载和使用外部的Go包 10
1.8 UNIX stdin、stdout和stderr 12
1.9 输出结果 12
1.10 使用标准输出 14
1.11 获取用户输入 16
1.11.1 :=和= 16
1.11.2 从标准输入中读取 17
1.11.3 与命令行参数协同工作 18
1.12 错误的输出结果 20
1.13 写入日志文件中 22
1.13.1 日志级别 22
1.13.2 日志工具 23
1.13.3 日志服务器 23
1.13.4 将信息发送至日志文件的Go程序 24
1.13.5 log.Fatal()函数 26
1.13.6 log.Panic()函数 27
1.13.7 写入自定义日志文件中 29
1.13.8 在日志项中输出行号 31
1.14 Go语言中的错误处理机制 32
1.14.1 错误数据类型 33
1.14.2 错误处理机制 35
1.15 使用Docker 37
1.16 练习和链接 42
1.17 本章小结 43
第2章 理解Go语言的内部机制 45
2.1 Go编译器 45
2.2 垃圾收集 47
2.2.1 三色算法 49
2.2.2 Go垃圾收集器的更多内容 52
2.2.3 映射、切片和Go垃圾收集器 53
2.2.4 不安全的代码 57
2.2.5 unsafe包 58
2.2.6 unsafe包的另一个示例 59
2.3 从Go程序中调用C代码 60
2.3.1 利用同一文件从Go程序中调用C代码 60
2.3.2 利用单独的文件从Go程序中调用C代码 61
2.3.3 C代码 61
2.3.4 Go代码 62
2.3.5 混合Go和C代码 63
2.4 从C代码中调用Go函数 64
2.4.1 Go包 65
2.4.2 C代码 66
2.5 defer关键字 67
2.6 panic()和recover()函数 71
2.7 两个方便的UNIX实用程序 74
2.7.1 strace工具 74
2.7.2 dtrace工具 75
2.8 Go环境 76
2.9 go env命令 78
2.10 Go汇编器 79
2.11 节点树 80
2.12 go build的更多内容 86
2.13 生成WebAssembly代码 88
2.13.1 WebAssembly简介 88
2.13.2 WebAssembly的重要性 89
2.13.3 Go和WebAssembly 89
2.13.4 示例 89
2.13.5 使用生成后的WebAssembly代码 90
2.14 一般的Go编码建议 92
2.15 练习和链接 93
2.16 本章小结 93
第3章 处理Go语言中的基本数据类型 95
3.1 数字数据类型 95
3.1.1 整数 96
3.1.2 浮点数 96
3.1.3 复数 96
3.1.4 Go 2中的数字字面值 98
3.2 Go语言中的循环 99
3.2.1 for循环 99
3.2.2 while循环 99
3.2.3 range关键字 100
3.2.4 多种Go循环示例 100
3.3 Go语言中的数组 102
3.3.1 多维数组 102
3.3.2 数组的缺点 105
3.4 Go语言中的切片 105
3.4.1 在切片上执行基本的操作 106
3.4.2 自动扩展 108
3.4.3 字节切片 109
3.4.4 copy()函数 109
3.4.5 多维切片 112
3.4.6 切片的另一个示例 112
3.4.7 利用sort.Slice()函数对切片进行排序 114
3.4.8 向切片中附加一个数组 116
3.5 Go语言中的映射 117
3.5.1 存储至nil映射中 119
3.5.2 何时应使用映射 120
3.6 Go语言中的常量 120
3.7 Go语言中的指针 124
3.8 时间和日期 127
3.8.1 与时间协同工作 128
3.8.2 解析时间 129
3.8.3 与日期协同工作 130
3.8.4 解析日期 130
3.8.5 修改日期和时间格式 132
3.9 度量Go语言中的命令和函数的执行时间 133
3.10 度量Go语言垃圾收集器的操作 135
3.11 Web链接和练习 136
3.12 本章小结 136
第4章 组合类型的使用 137
4.1 关于组合类型 137
4.2 Go语言中的结构 137
4.2.1 指向结构的指针 140
4.2.2 Go语言中的new关键字 142
4.3 Go语言中的元组 142
4.4 Go语言中的正则表达式和模式匹配 144
4.4.1 理论知识简介 144
4.4.2 简单的示例 144
4.4.3 高级示例 147
4.4.4 匹配IPv4地址 150
4.5 Go语言中的字符串 154
4.5.1 rune 156
4.5.2 unicode包 158
4.5.3 strings包 159
4.6 switch语句 163
4.7 计算高精度Pi值 167
4.8 生成Go语言中的键-值存储 170
4.9 Go语言和JSON格式 175
4.9.1 读取JSON数据 175
4.9.2 保存JSON数据 177
4.9.3 使用Marshal()和Unmarshal()函数 179
4.9.4 解析JSON数据 181
4.9.5 Go语言和XML 183
4.9.6 读取XML文件 186
4.9.7 自定义XML格式 188
4.10 Go语言和YAML格式 189
4.11 附加资源 190
4.12 练习和Web链接 190
4.13 本章小结 191
第2部分
第5章 利用数据结构改进Go代码 195
5.1 图和节点 195
5.2 度量算法的复杂度 196
5.3 二叉树 196
5.3.1 实现Go语言中的二叉树 197
5.3.2 二叉树的优点 199
5.4 Go语言中的哈希表 200
5.4.1 实现Go语言中的哈希表 201
5.4.2 实现查找功能 204
5.4.3 哈希表的优点 204
5.5 Go语言中的链表 205
5.5.1 实现Go语言中的链表 206
5.5.2 链表的优点 209
5.6 Go语言中的双向链表 210
5.6.1 实现Go语言中的双向链表 211
5.6.2 双向链表的优点 214
5.7 Go语言中的队列 214
5.8 Go语言中的栈 218
5.9 container包 221
5.9.1 使用container/heap 221
5.9.2 使用container/list 224
5.9.3 使用container/ring 226
5.10 在Go语言中生成随机数 227
5.11 生成安全的随机数 233
5.12 执行矩阵计算 234
5.12.1 矩阵的加法和减法 235
5.12.2 矩阵乘法 237
5.12.3 矩阵的除法 241
5.12.4 计算数组维度 246
5.13 求解数独谜题 247
5.14 附加资源 251
5.15 本章练习 251
5.16 本章小结 252
第6章 Go包和函数 253
6.1 Go包 253
6.2 Go语言中的函数 254
6.2.1 匿名函数 254
6.2.2 返回多个值的函数 255
6.2.3 命名函数的返回值 257
6.2.4 包含指针参数的函数 258
6.2.5 返回指针的函数 259
6.2.6 返回其他函数的函数 260
6.2.7 接收其他函数作为参数的函数 262
6.2.8 可变参数函数 263
6.3 开发自己的Go包 264
6.3.1 编译Go包 266
6.3.2 私有变量和函数 267
6.3.3 init()函数 267
6.4 Go模块 269
6.4.1 创建并使用Go模块 270
6.4.2 使用同一Go模块的不同版本 278
6.4.3 Go模块在Go语言中的存储位置 279
6.4.4 go mod vendor命令 280
6.5 创建较好的Go包 281
6.6 syscall包 282
6.7 go/scanner、go/parser和go/token包 286
6.7.1 go/ast包 287
6.7.2 go/scanner包 287
6.7.3 go/parser包 289
6.7.4 操作示例 292
6.7.5 利用给定的字符串长度查找变量名 293
6.8 文本和HTML模板 298
6.8.1 生成文本输出 299
6.8.2 构建HTML输出结果 301
6.9 附加资源 308
6.10 练习 309
6.11 本章小结 309
第7章 反射和接口 311
7.1 类型方法 311
7.2 Go接口 313
7.3 编写自己的接口 316
7.3.1 使用Go接口 316
7.3.2 使用switch语句和数据类型 318
7.4 反射 320
7.4.1 简单的反射示例 321
7.4.2 高级反射示例 323
7.4.3 反射的缺点 326
7.4.4 reflectwalk库 326
7.5 Go语言中的面向对象编程 329
7.6 Git和GitHub简介 332
7.6.1 使用Git 332
7.6.2 git status命令 333
7.6.3 git pull命令 333
7.6.4 git commit命令 333
7.6.5 git push命令 334
7.6.6 与分支协同工作 334
7.6.7 与文件协同工作 335
7.6.8 .gitignore文件 336
7.6.9 使用git diff命令 336
7.6.10 与标签协同工作 337
7.6.11 git cherry-pick命令 338
7.7 使用Delve进行调试 339
7.8 附加资源 343
7.9 本章练习 344
7.10 本章小结 344
第3部分
第8章 UNIX系统编程 347
8.1 UNIX进程 348
8.2 flag包 348
8.3 viper包 353
8.3.1 简单的viper示例 353
8.3.2 从flag到viper包 354
8.3.3 读取JSON配置文件 356
8.3.4 读取YAML配置文件 358
8.4 cobra包 360
8.4.1 简单的cobra示例 361
8.4.2 创建命令行别名 366
8.5 io.Reader和io.Writer接口 369
8.6 bufio包 369
8.7 读取文本文件 370
8.7.1 逐行读取文本文件 370
8.7.2 逐个单词读取文本文件 372
8.7.3 逐个字符读取文本文件 374
8.7.4 从/dev/random中读取 376
8.8 读取特定的数据量 377
8.9 二进制格式的优点 379
8.10 读取CSV文件 380
8.11 写入文件中 383
8.12 加载和保存磁盘上的数据 386
8.13 再访strings包 389
8.14 bytes包 391
8.15 文件权限 392
8.16 处理UNIX信号 394
8.16.1 处理两个信号 394
8.16.2 处理全部信号 397
8.17 Go语言中的UNIX管道编程 399
8.18 syscall.PtraceRegs 401
8.19 跟踪系统调用 403
8.20 用户ID和组ID 408
8.21 Docker API和Go语言 409
8.22 附加资源 412
8.23 本章练习 413
8.24 本章小结 413
第9章 Go语言中的并发编程—协程、通道和管道 415
9.1 进程、线程和协程 415
9.1.1 Go调度器 416
9.1.2 并发和并行 416
9.2 协程 417
9.2.1 创建一个协程 417
9.2.2 创建多个协程 418
9.3 等待协程结束 420
9.4 通道 424
9.4.1 写入通道 424
9.4.2 从通道中读取数据 426
9.4.3 从关闭的通道中读取 427
9.4.4 作为函数参数的通道 428
9.5 管道 429
9.6 竞态条件 433
9.7 Go语言和Rust语言并发模型的比较 435
9.8 Go语言和Erlang语言并发模型的比较 435
9.9 附加资源 436
9.10 本章练习 436
9.11 本章小结 436
第10章 Go语言的并发性—高级话题 437
10.1 再访Go调度器 437
10.2 select关键字 440
10.3 协程超时 443
10.3.1 协程超时第1部分 443
10.3.2 协程超时第2部分 445
10.4 再访Go通道 447
10.4.1 信号通道 448
10.4.2 缓冲通道 448
10.4.3 nil通道 450
10.4.4 通道的通道 452
10.4.5 指定协程的执行顺序 454
10.4.6 如何使用协程 457
10.5 共享内存和共享变量 458
10.5.1 sync.Mutex类型 458
10.5.2 忘记解锁互斥体 461
10.5.3 sync.RWMutex类型 463
10.5.4 atomic包 466
10.5.5 基于协程的共享内存 468
10.6 重访Go语句 470
10.7 缓存竟态条件 473
10.8 context包 479
10.8.1 context包的高级示例 483
10.8.2 context包的另一个示例 488
10.8.3 worker池 490
10.9 附加资源 494
10.10 本章练习 494
10.11 本章小结 495
第11章 代码测试、优化和分析 497
11.1 优化 498
11.2 优化Go代码 499
11.3 分析Go代码 499
11.3.1 net/http/pprof标准包 499
11.3.2 简单的分析示例 500
11.3.3 方便的外部包 508
11.3.4 Go分析器的Web界面 510
11.4 go tool trace实用程序 514
11.5 测试Go代码 518
11.5.1 针对现有Go代码编写测试 519
11.5.2 测试代码的覆盖率 523
11.6 利用数据库后端测试HTTP服务器 526
11.6.1 testing/quick包 533
11.6.2 测试时间过长或无法结束 537
11.7 Go代码基准测试 540
11.8 简单的基准测试示例 540
11.9 缓冲写入的基准测试 546
11.10 查找程序中不可访问的Go代码 551
11.11 交叉编译 552
11.12 生成示例函数 554
11.13 从Go代码到机器代码 556
11.14 生成Go代码文档 559
11.15 使用Docker镜像 564
11.16 附加资源 566
11.17 本章练习 567
11.18 本章小结 568
第12章 网络编程基础知识 569
12.1 net/http、net和http.RoundTripper 569
12.1.1 http.Response结构 570
12.1.2 http.Request结构 570
12.1.3 http.Transport结构 571
12.2 TCP/IP 572
12.3 IPv4和IPv6 573
12.4 nc(1)命令行实用程序 573
12.5 读取网络接口的配置 574
12.6 在Go语言中执行DNS查找 578
12.6.1 获取域的NS记录 581
12.6.2 获取域的MX记录 582
12.7 在Go语言中创建Web服务器 583
12.7.1 使用atomic包 587
12.7.2 分析一个HTTP服务器 589
12.7.3 创建一个站点 594
12.8 HTTP跟踪机制 604
12.9 在Go语言中创建一个Web客户端 610
12.10 HTTP连接超时 615
12.10.1 SetDeadline()函数 617
12.10.2 在服务器端设置超时时间 618
12.10.3 其他超时方式 620
12.11 Wireshark和tshark工具 621
12.12 gRPC和Go 622
12.12.1 定义接口定义文件 622
12.12.2 gRPC客户端 624
12.12.3 gRPC服务器 626
12.13 附加资源 628
12.14 本章练习 629
12.15 本章练习 630
第13章 网络编程—构建自己的服务器和客户端 631
13.1 与HTTPS流量协同工作 631
13.1.1 生成证书 631
13.1.2 HTTPS客户端 632
13.1.3 简单的HTTPS服务器 634
13.1.4 开发TLS服务器和客户端 636
13.2 net标准包 639
13.3 开发一个TCP客户端 640
13.4 开发一个TCP服务器 643
13.5 开发一个UDP客户端 648
13.6 部署UDP服务器 650
13.7 并发TCP服务器 653
13.8 创建TCP/IP服务器的Docker镜像 663
13.9 远程过程调用(RPC) 665
13.9.1 RPC客户端 666
13.9.2 RPC服务器 667
13.10 底层网络编程 669
13.11 本章资源 677
13.12 本章练习 677
13.13 本章小结 678
第14章 Go语言中的机器学习 679
14.1 计算简单的统计属性 679
14.2 回归 683
14.2.1 线性回归 683
14.2.2 实现线性回归 684
14.2.3 绘制数据 686
14.3 分类 690
14.4 聚类 694
14.5 异常检测 697
14.6 神经网络 700
14.7 离群值分析 702
14.8 与TensorFlow协同工作 705
14.9 与Apache Kafka协同工作 710
14.10 附加资源 715
14.11 本章练习 716
14.12 本章小结 716
14.13 接下来的工作 716
·X·
精通Go语言(第2版)
·XI·
目 录
|
內容試閱:
|
本书旨在帮助读者成为一名更加优秀的Go语言开发者。
本书涵盖了许多令人激动的主题,包括与Go语言机器学习相关的新增章节,以及与Viper和Cobra Go包、gRPC、Docker镜像协同操作、YAML文件协同操作、go/scanner和go/token包协同操作、从Go语言中生成WebAssembly代码相关的信息和示例。
适用读者
本书适用于希望进一步提升编程水平的中级Go程序员和Go语言编程爱好者;此外,本书也适用于具有一定编程经验的使用其他语言的开发人员,他们希望了解Go语言,但并不打算从for循环开始从头学起。
本书内容
第1章首先将介绍Go语言的历史和优点,随后将描述godoc应用程序并解释如何编译和执行Go程序。接下来,本章将考查如何显示输出结果、获取用户输入内容、与程序的命令行参数协调工作、使用日志文件。后,本章还将讨论错误处理机制,该机制在Go语言中饰演了重要的角色。
第2章首先将讨论Go垃圾收集及其操作方式,随后将介绍不安全的代码、unsafe包、如何在Go语言程序中调用C语言代码、如何从C语言程序中调用Go代码。随后,本章将依次展示defer关键字的用法、strace(1)和dtrace(1)实用程序。在本章其余部分中,我们还将学习如何获取与Go环境相关的信息、Go汇编器的使用以及如何从Go语言中生成WebAssembly。
第3章将讨论Go语言提供的数据类型,其中包括数组、切片、映射、Go指针、常量、循环,以及与日期和时间的协同工作方式。读者不应错过本章中的精彩内容。
第4章在介绍元组、字符串、rune、字节切片和字符串字面值之前首先将考查Go语言结构和关键字struct。本章其余内容则将阐述正则表达式和模式匹配、switch语句、strings包、math/big包、Go语言中的键-值开发、XML协同工作方式以及JSON文件。
第5章将讨论当Go语言提供的结构不适用于特定问题时,如何开发自己的数据结构,包括二叉树、哈希表、链表、队列、栈及其优点。除此之外,本章还将讲解container标准Go语言包中结构的应用,以及如何使用Go语言破解Sudoku谜语以及生成随机数。
第6章将讨论包和函数,包括init()函数、syscall标准Go包、text/template包和html/template包。另外,本章还将进一步展示go/scanner、go/parser和go/token高级包的使用。不难发现,本章将极大地提升Go语言开发人员的编程技能。
第7章将讨论Go语言中3个高级概念,即反射、接口和类型方法。除此之外,本章还将介绍Go语言的面向对象功能,以及如何利用Delve调试Go程序。
第8章将讨论Go语言中的系统编程,其中涉及与命令行参数协同工作的flag包、处理UNIX信号、文件输入和输出、bytes包、io.Reader和io.Writer接口,以及Viper和Cobra Go包的使用。
第9章将讨论协程、通道和管道,这也是实现并发的Go语言方式。此外,本章还将学习进程、线程和协程之间的差别、sync包和Go调度器的操作方式。
第10章将在第9章的基础上继续探讨协程和通道。读者将学习更多关于Go调度器、共享内存、互斥体、sync.Mutex类型和sync.RWMutex类型方面的知识。本章后一部分内容将阐述工作池,以及如何监测竞争条件。
第11章将介绍代码测试机制、代码优化和代码分析、交叉编译、生成文档Go代码基准测试、创建示例函数、查找不可访问的Go代码。
第12章将介绍net/http包,以及如何在Go语言中开发Web客户端和Web服务,此外还包括http.Response、http.Request、http.Transport结构的使用和http.NewServeMux类型。读者甚至还将学习如何在Go语言中开发一个完整的站点。进一步讲,本章将学习如何读取网络接口的配置信息,以及如何在Go语言中执行DNS查找。除此之外,我们还将学习如何在Go语言的基础上使用gRPC。
第13章将讨论如何与HTTPS流量协同工作、利用net包提供的各项功能在Go语言中创建UDP和TCP服务器和客户端。本章其他主题还包括创建RPC客户端和服务器、在Go语言中开发TCP并发服务器和读取原始网络包。
第14章将介绍Go语言中的机器学习,包括分类、聚类、异常检测、异常值、神经网络、TensorFlow,以及Go语言中与Apache Kafka的协同工作方式。
本书可被划分为3个逻辑部分。其中,第1部分内容深入考查某些重要的Go语言概念,包括用户输入和输出、下载外部Go语言包、编译Go代码、从Go语言程序中调用C代码、从Go语言中创建WebAssembly、使用Go语言的基本类型和Go语言的复合类型。
第2部分内容包括第5~7章,主要处理包和模块中的Go语言代码组织问题、Go语言的项目设计以及Go语言中的某些高级特性。
第3部分内容包括第8~14章,主要处理Go语言中的一些可操作问题。其中,第8~11章将讨论Go语言中的系统编程、Go语言中的并发编程、代码测试、优化和分析;第12~14章将介绍网络编程和Go语言中的机器学习。
本书内容涉及Go和WebAssembly、基于Go语言的Docker、利用Viper和Cobra包创建专业的命令行工具、解析JSON和YAML记录、矩阵计算、与Sudoku协调工作、go/scanner和go/token包、处理git(1)和GitHub、atomic包、gRPC和Go语言以及HTTPS。
本书示例程序短小而完整,旨在阐述相关概念。这包含两方面的优点:首先,读者在学习某种技术时无须查看冗长的代码列表;其次,当创建自己的应用程序和实用程序时,读者可使用这些代码作为起始点。
?提示:
我们已经了解到容器和Docker的重要性,因而本书中包括的各种Go执行文件示例均在Docker镜像中加以使用—Docker镜像可方便地部署服务器应用程序。
技术需求
当运行本书示例程序时,我们需要一台基于UNIX环境的计算机,同时安装较新版本的Go语言,其中包括运行Mac OS X、macOS或Linux的机器。另外,本书提供的大多数代码也将在Microsoft Windows机器上运行。
为了从本书中获得更多开发技能,建议读者尽可能地在自己的程序中实现每章中的知识点,并查看相应的操作结果。除此之外,读者还应完成每章结尾的练习题,或者找出自己的编程问题。
下载示例代码文件
读者可访问www.packt.com并通过个人账户下载本书的示例代码文件。无论读者在何处购买了本书,均可访问www.packt.com/support,经注册后我们会直接将相关文件通过电子邮件的方式发送给您。
下载代码文件的具体操作步骤如下。
(1)访问www.packt.com并注册。
(2)选择SUPPORT选项卡。
(3)单击Code Downloads & Errata。
(4)在Search搜索框中输入书名,然后按照屏幕上的说明操作。
当文件下载完毕后,可利用下列软件的版本解压或析取文件夹中的内容。
* WinRAR/7-Zip(Windows环境)。
* Zipeg/iZip/UnRarX(Mac环境)。
* 7-Zip/PeaZip(Linux环境)。
另外,本书的代码包也托管于GitHub上,对应网址为https://github.com/PacktPublishing/ Mastering-Go-Second-Edition。若代码被更新,现有的GitHub库也会保持同步更新。
读者还可访问https://github.com/PacktPublishing/并从对应分类中查看其他代码包和视频内容。
下载彩色图像
我们还提供了与本书相关的PDF文件,其中包含书中所用截图/图表的彩色图像,读者可访问https://static.packt-cdn.com/downloads/9781838559335.pdf进行下载。
图标表示提示信息和操作技巧。
读者反馈和客户支持
欢迎读者对本书提出建议或意见并予以反馈。
对此,读者可向customercare@packtpub.com发送邮件,并以书名作为邮件标题。
勘误表
尽管我们希望做到尽善尽美,但错误依然在所难免。如果读者发现谬误之处,无论是文字错误抑或是代码错误,还望不吝赐教。对此,读者可访问http://www.packtpub.com/ submit-errata,选取对应书籍,单击Errata Submission超链接,输入并提交相关问题的详细内容。
版权须知
一直以来,互联网上的版权问题从未间断,Packt出版社对此类问题异常重视。若读者在互联网上发现本书任意形式的副本,请告知我们网络地址或网站名称,我们将对此予以处理。关于盗版问题,读者可发送邮件至copyright@packtpub.com。
若读者针对某项技术具有专家级的见解,抑或计划撰写书籍或完善某部著作的出版工作,则可访问authors.packtpub.com。
问题解答
若读者对本书有任何疑问,均可发送邮件至questions@packtpub.com,我们将竭诚为您服务。
·IV·
精通Go语言(第2版)
·VII·
前 言
|
|