暂无商品咨询信息 [发表商品咨询]
·实践导向,解析Go语言底层机制与性能优化。
·涵盖系统编程,拓展WebAssembly等前沿应用。
·结合大模型技术,探索Go语言人工智能场景。
·内容系统详实,助力读者快速进阶。
本书从实践出发,全面讲解Go语言的高级编程技术和应用场景,涵盖Go语言的底层机制、性能优化、系统编程及前沿应用等多个方面。全书共10章,第1章回顾Go语言的发展历程,帮助读者理解其设计理念和演进过程;第2章和第3章系统介绍CGO编程与Go汇编语言的使用方法,使读者能够高效调用C库并深入理解Go的底层实现:第4章和第5章深入解析Go运行时和编译器,包括内存管理、调度器、垃圾收集机制等相关技术;第6章和第7章探讨Go在RPC和 Web编程中的应用,介绍Protobuf、 gRPC等核心技术,并剖析Web框架的设计和优化方案;第8章和第9章拓展Go的应用边界,涵盖 WebAssembly 和GUI 编程,使Go语言不仅限于服务器端编程;第10章新增Go语言与大模型的结合,探索人工智能技术在Go生态系统中的应用场景。
本书适合对Go语言有一定基础,希望深入理解其底层机制和高级应用的开发者阅读。无论是系统工程师、后端开发者,还是对Go语言运行时、编译器及新兴技术感兴趣的Go程序员,都能在本书中找到翔实的技术解析和实践指南,达到高效开发和技术进阶的目的。
柴树杉,Go语言代码贡献者,凹语言联合发起人,编程语言开放社区(PLOC)发起人。著有《Go语言定制指南》和《WebAssembly标准入门》等书。现致力于推动国产编程语言、少儿编程技术的发展。
曹春晖,在Web领域工作多年,开源爱好者。构建过多个大型网站系统,对大型网站系统的架构和性能有深刻理解。
王敏,毕业于中国地质大学(武汉)艺术设计(动画方向)专业。参与《桃花源记》等网游界面设计,现深耕儿童艺术教育,所著《儿童创意彩铅》以专业视角开启少儿美学新境界。
目录
第 1章 Go语言基础 1
1.1 Go语言创世纪 1
1.1.1 来自贝尔实验室特有基因 2
1.1.2 你好,世界 4
1.2 “Hello, World”的革命 4
1.2.1 B语言—Ken Thompson,1969 5
1.2.2 C语言—Dennis Ritchie,1972—1989 5
1.2.3 Newsqueak—Rob Pike,1989 6
1.2.4 Alef—Phil Winterbottom,1993 8
1.2.5 Limbo—Sean Dorward,PhilWinterbottom,Rob Pike,1995 10
1.2.6 Go语言—2007—2009 10
1.2.7 你好,世界!—2.0版本 12
1.3 数组、字符串和切片 13
1.3.1 数组 13
1.3.2 字符串 16
1.3.3 切片 21
1.4 函数、方法和接口 27
1.4.1 函数 27
1.4.2 方法 31
1.4.3 接口 35
1.5 面向并发的内存模型 39
1.5.1 goroutine和系统线程 40
1.5.2 原子操作 40
1.5.3 顺序一致性内存模型 44
1.5.4 初始化顺序 45
1.5.5 goroutine的创建 46
1.5.6 基于通道的通信 46
1.5.7 不靠谱的同步 48
1.6 泛型编程 49
1.6.1 认识Go语言的泛型 49
1.6.2 泛型和接口 50
1.6.3 运行时Cloner[T]和T类型的区别 52
1.6.4 泛型后方法沦为“二等公民” 53
1.6.5 方法不支持泛型的原因 54
1.6.6 Go语言的泛型为何用方括号 54
1.7 自定义迭代器 55
1.7.1 使用迭代器 55
1.7.2 迭代器的定义 56
1.7.3 迭代器的原理 57
1.7.4 loopvar语义调整 58
1.8 补充说明 59
第 2章 CGO编程 60
2.1 快速入门 60
2.1.1 最简CGO程序 60
2.1.2 基于C标准库函数输出字符串 61
2.1.3 使用自己的C语言函数 61
2.1.4 C代码的模块化 62
2.1.5 用Go重新实现C语言函数 63
2.1.6 面向C语言接口的Go编程 64
2.2 CGO基础 65
2.2.1 import "C"语句 65
2.2.2 #cgo命令 67
2.2.3 build标志条件编译 68
2.3 类型转换 69
2.3.1 数值类型的转换 69
2.3.2 Go字符串和切片的转换 71
2.3.3 结构体、联合和枚举类型的转换 72
2.3.4 数组、字符串和切片的转换 75
2.3.5 指针间的转换 78
2.3.6 数值和指针的转换 79
2.3.7 切片间的转换 79
2.4 函数调用 80
2.4.1 Go调用C语言函数 80
2.4.2 C语言函数的返回值 81
2.4.3 void函数的返回值 82
2.4.4 C调用Go导出函数 83
2.5 内存模型 84
2.5.1 Go访问C内存 84
2.5.2 C临时访问传入的Go内存 85
2.5.3 C长期持有Go指针对象 87
2.5.4 导出C语言函数不能返回Go内存 88
2.5.5 runtime.Pinner类型 89
2.6 C++类封装 90
2.6.1 C++类到Go语言对象 90
2.6.2 Go语言对象到C++类 95
2.6.3 彻底解放C++的this指针 98
2.7 MOSN带来的优化 100
2.8 补充说明 101
第3章 Go汇编语言 102
3.1 快速入门 102
3.1.1 实现和声明 102
3.1.2 定义整型变量 103
3.1.3 定义字符串类型变量 104
3.1.4 定义main()函数 107
3.1.5 特殊字符 108
3.1.6 没有分号 108
3.2 计算机体系结构 108
3.2.1 图灵机和Brainfuck语言 109
3.2.2 《人力资源机器》游戏 110
3.2.3 x86-64体系结构 111
3.2.4 Go汇编中的伪寄存器 112
3.2.5 x86-64指令集 113
3.2.6 ARM64指令集 115
3.3 常量和全局变量 116
3.3.1 常量 116
3.3.2 全局变量 117
3.3.3 变量的内存布局 121
3.3.4 标识符规则和特殊标志 123
3.4 函数 123
3.4.1 基本语法 123
3.4.2 函数参数和返回值 125
3.4.3 参数和返回值的内存布局 126
3.4.4 函数中的局部变量 128
3.4.5 调用其他函数 130
3.4.6 宏函数 132
3.5 控制流 132
3.5.1 顺序执行 132
3.5.2 if/goto跳转 135
3.5.3 for循环 136
3.6 再论函数 138
3.6.1 函数调用规范 138
3.6.2 高级汇编语言 139
3.6.3 PCDATA和FUNCDATA 141
3.6.4 递归函数:1到n求和 144
3.6.5 闭包函数 146
3.6.6 调用约定 148
3.7 汇编语言的威力 148
3.7.1 系统调用 148
3.7.2 直接调用C语言函数 150
3.7.3 AVX指令集 152
3.8 补充说明 153
第4章 Go运行时 155
4.1 运行时概览 155
4.1.1 调度器 155
4.1.2 内存分配器 156
4.1.3 垃圾收集器 156
4.1.4 网络轮询器 156
4.1.5 小结 156
4.2 调度器 157
4.2.1 生产者细节 157
4.2.2 消费者细节 158
4.2.3 任务队列细节 159
4.2.4 处理阻塞 159
4.2.5 理解调度和延迟的关系 162
4.2.6 小结 164
4.3 内存分配器 164
4.3.1 逃逸分析 164
4.3.2 操作系统内存管理的二次抽象 165
4.3.3 内存分配器简介 166
4.3.4 理解Go的内存占用 168
4.3.5 小结 171
4.4 垃圾收集器 171
4.4.1 语法垃圾和语义垃圾 171
4.4.2 并发标记清扫的核心流程 172
4.4.3 与Java分代机制的对比 173
4.4.4 一些常见的优化思路 175
4.4.5 小结 175
4.5 网络轮询器 175
4.5.1 传统网络编程 176
4.5.2 Go对操作系统的网络API的封装 177
4.5.3 阻塞易理解,回调难理解 177
4.5.4 goroutine的挂起和唤醒流程 179
4.5.5 网络轮询器的缺陷 180
4.5.6 小结 181
4.6 运行时性能分析 181
4.6.1 安装依赖的Graphviz工具 181
4.6.2 CPU性能测试分析 182
4.6.3 内存分配性能测试分析 183
4.6.4 在程序中增加性能分析 184
4.6.5 性能分析引导的优化 185
4.6.6 持续性能分析 185
4.6.7 堆内存性能分析 188
4.6.8 小结 189
4.7 补充说明 189
第5章 Go编译器 190
5.1 表达式 190
5.1.1 基础表达式语法 190
5.1.2 表达式的语法分析 191
5.1.3 求值表达式 193
5.1.4 标识符:为表达式中引入变量 193
5.2 类型检查 195
5.2.1 语义错误 195
5.2.2 go/types包 196
5.2.3 跨包的类型检查 197
5.2.4 小结 200
5.3 语义分析 200
5.3.1 名字空间 200
5.3.2 整体架构 203
5.3.3 小结 204
5.4 SSA 中间代码 204
5.4.1 SSA简介 204
5.4.2 生成SSA 204
5.4.3 SSA解释运行 208
5.4.4 SSA包的架构 209
5.4.5 小结 210
5.5 LLVM后端 210
5.5.1 最小编译器 211
5.5.2 表达式手动转换到LLVM IR程序 212
5.5.3 表达式自动转换到LLVM IR程序 212
5.5.4 小结 214
5.6 示例:检查append参数 214
5.6.1 append()函数的参数陷阱 214
5.6.2 Go语言社区的不同观点 215
5.6.3 统计真实代码发现问题 215
5.6.4 go vet自动识别这类问题 216
5.7 补充说明 217
第6章 RPC和Protobuf 218
6.1 RPC入门 218
6.1.1 RPC版“Hello, World” 218
6.1.2 更安全的RPC接口 219
6.1.3 跨语言的RPC 222
6.1.4 HTTP上的RPC 224
6.2 Protobuf 225
6.2.1 Protobuf入门 225
6.2.2 定制代码生成插件 227
6.2.3 自动生成完整的RPC代码 230
6.3 玩转RPC 233
6.3.1 客户端RPC的实现原理 233
6.3.2 基于RPC实现监视功能 234
6.3.3 反向RPC 237
6.3.4 上下文信息 238
6.4 gRPC入门 239
6.4.1 gRPC技术栈 239
6.4.2 gRPC简介 240
6.4.3 gRPC流 241
6.4.4 发布/订阅模式 244
6.5 gRPC进阶 247
6.5.1 证书认证 247
6.5.2 令牌认证 251
6.5.3 截取器 253
6.5.4 与Web服务共存 254
6.6 gRPC和Protobuf扩展 255
6.6.1 验证器 256
6.6.2 REST风格的接口 258
6.6.3 Nginx 261
6.7 基于Protobuf的框架pbgo 261
6.7.1 Protobuf扩展语法 262
6.7.2 插件中读取扩展信息 263
6.7.3 生成REST风格的接口的代码 264
6.7.4 启动REST服务 266
6.8 补充说明 266
第7章 Go Web编程 267
7.1 Go Web编程简介 267
7.2 请求路由 270
7.2.1 HttpRouter简介 271
7.2.2 HttpRouter原理 273
7.2.3 压缩检索树创建过程 274
7.3 中间件 278
7.3.1 代码泥潭 278
7.3.2 使用中间件剥离非业务逻辑 280
7.3.3 更优雅的中间件写法 282
7.3.4 在中间件中适合做哪些事情 283
7.4 请求验证 284
7.4.1 重构请求验证函数 285
7.4.2 用请求验证器减少重复劳动 286
7.4.3 请求验证器原理 287
7.5 与数据库交互 290
7.5.1 从database/sql讲起 290
7.5.2 提高生产效率的ORM和SQL构建器 292
7.5.3 隐式SQL导致线上故障 294
7.5.4 基于SQLC的数据层开发 295
7.6 服务流量限制 296
7.6.1 流量限制算法——令牌桶算法 298
7.6.2 令牌桶算法原理 300
7.6.3 服务瓶颈和QoS 302
7.7 大型Web项目的分层 302
7.8 接口和表驱动开发 308
7.8.1 业务系统的发展过程 308
7.8.2 使用函数封装业务流程 308
7.8.3 使用接口进行抽象 309
7.8.4 接口的优缺点 312
7.8.5 表驱动开发 313
7.9 灰度发布 314
7.9.1 通过分批次部署实现灰度发布 314
7.9.2 通过业务规则进行灰度发布 315
7.9.3 如何实现灰度发布规则 317
7.10 现代Go语言后端编程 320
7.10.1 Go Micro 321
7.10.2 Kratos 322
7.10.3 go-zero 322
7.10.4 小结 323
7.11 补充说明 323
第8章 Go和WebAssembly 324
8.1 WebAssembly简介 324
8.1.1 诞生背景 324
8.1.2 终将被编译为WebAssembly 325
8.2 你好,WebAssembly 325
8.2.1 用Go语言生成并执行WebAssembly模块 325
8.2.2 在Node.js中执行WebAssembly模块 326
8.2.3 在浏览器中执行WebAssembly模块 326
8.2.4 小结 328
8.3 外部函数接口 328
8.3.1 使用JavaScript函数 328
8.3.2 回调Go语言函数 330
8.3.3 syscall/js包 332
8.3.4 WebAssembly模块的导入函数 334
8.3.5 WASI规范 337
8.4 WebAssembly虚拟机 337
8.4.1 构建WebAssembly模块 337
8.4.2 通过虚拟机执行 338
8.4.3 小结 338
8.5 示例:WebAssembly插件 338
8.5.1 MOSN的WebAssembly插件
架构设计 339
8.5.2 认识Proxy-Wasm规范 339
8.5.3 处理HTTP请求示例 341
8.5.4 小结 343
8.6 导出Go语言函数 343
8.6.1 构建WebAssembly模块 343
8.6.2 执行WebAssembly模块 344
8.6.3 运行时限制 345
8.7 补充说明 345
第9章 Go GUI编程 346
9.1 Shiny框架入门 346
9.1.1 Hello, Shiny 346
9.1.2 显示图像 347
9.1.3 核心组件 348
9.1.4 底层驱动程序 349
9.2 Fyne框架入门 350
9.2.1 安装环境 350
9.2.2 安装Fyne核心库 350
9.2.3 Hello, Fyne 350
9.2.4 回调函数 351
9.2.5 对话框 352
9.2.6 画布 354
9.2.7 布局管理 363
9.2.8 Fyne在浏览器中 367
9.3 Walk框架入门 370
9.3.1 你好, Walk 370
9.3.2 声明式语法 371
9.3.3 通过.manifest文件指定依赖 372
9.3.4 内置.manifest文件 373
9.3.5 给可执行程序添加图标 373
9.3.6 添加版本信息 374
9.3.7 Walk的工作原理 375
9.4 国际化支持 379
9.4.1 你好,世界! 379
9.4.2 国际化实现原理 379
9.4.3 你好,世界!多语言版 380
9.4.4 制作翻译文件 380
9.4.5 本地的语言环境 381
9.4.6 为何如此烦琐 381
9.5 补充说明 381
第 10章 大模型 382
10.1 AI机器人gabyhelp 382
10.1.1 Gaby框架 382
10.1.2 如何接入大语言模型 384
10.1.3 小结 386
10.2 DeepSeek 386
10.2.1 生成API key 386
10.2.2 Go语言SDK 387
10.2.3 Go语言验证服务 389
10.2.4 多轮对话补全 389
10.2.5 推理模型 390
10.2.6 交互式对话 391
10.2.7 小结 393
10.3 LangChain for Go 393
10.3.1 连接OpenAI的大模型 393
10.3.2 连接DeepSeek 393
10.3.3 构建大模型聊天应用 394
10.3.4 小结 398
10.4 Ollama 398
10.4.1 安装Ollama 398
10.4.2 下载大模型 399
10.4.3 运行大模型 400
10.4.4 本地大模型驱动聊天应用 401
10.4.5 小结 402
10.5 大模型智能体 402
10.5.1 计算常量表达式 402
10.5.2 集成到大模型流程中 402
10.5.3 应用到聊天服务中 404
10.5.4 小结 405
10.6 补充说明 405
后记 406
基本信息 | |
---|---|
出版社 | 人民邮电出版社 |
ISBN | 9787115673244 |
条码 | 9787115673244 |
编者 | 柴树杉 曹春晖 著 |
译者 | -- |
出版年月 | 2025-07-01 00:00:00.0 |
开本 | 16开 |
装帧 | 平装 |
页数 | 406 |
字数 | 650 |
版次 | 2 |
印次 | 1 |
纸张 | 一般胶版纸 |
暂无商品评论信息 [发表商品评论]
暂无商品咨询信息 [发表商品咨询]