当前位置:当前位置:主页 > 计算机电子书 > > Go语言 pdf电子书
精通Go语言(第2版)

精通Go语言(第2版) PDF 超清中文版

  • 更新:2022-09-04
  • 大小:33.1 MB
  • 类别:Go语言
  • 作者:米哈里斯·托卡洛斯
  • 出版:清华大学出版社
  • 格式:PDF

  • 资源介绍
  • 学习心得
  • 相关内容

精通Go语言(第2版)》是由清华大学出版社出版的一本关于Go语言方面的书籍,作者是米哈里斯·托卡洛斯,主要介绍了关于Go语言方面的知识内容,目前在Go语言类书籍综合评分为:8.2分。

书籍介绍

编辑推荐

《精通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

资源获取

相关资源

网友留言