·实践导向,解析Go语言底层机制与性能优化。 ·涵盖系统编程,拓展WebAssembly等前沿应用。 ·结合大模型技术,探索Go语言人工智能场景。 ·内容系统详实,助力读者快速阶。
售 价:¥
纸质售价:¥62.70购买纸书
温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印
为你推荐
内 容 提 要
序 一
序 二
前 言
第1章 Go语言基础
1.1 Go语言创世纪
1.1.1 来自贝尔实验室特有基因
1.1.2 你好,世界
1.2 “Hello, World”的革命
1.2.1 B语言——Ken Thompson,1969
1.2.2 C语言——Dennis Ritchie,1972—1989
1.2.3 Newsqueak——Rob Pike,1989
1.2.4 Alef——Phil Winterbottom,1993
1.2.5 Limbo——Sean Dorward, Phil Winterbottom, Rob Pike,1995
1.2.6 Go语言——2007—2009
1.2.7 你好, 世界!——2.0版本
1.3 数组、字符串和切片
1.3.1 数组
1.3.2 字符串
1.3.3 切片
1.4 函数、方法和接口
1.4.1 函数
1.4.2 方法
1.4.3 接口
1.5 面向并发的内存模型
1.5.1 goroutine和系统线程
1.5.2 原子操作
1.5.3 顺序一致性内存模型
1.5.4 初始化顺序
1.5.5 goroutine的创建
1.5.6 基于通道的通信
1.5.7 不靠谱的同步
1.6 泛型编程
1.6.1 认识Go语言的泛型
1.6.2 泛型和接口
1.6.3 运行时Cloner[T]和T类型的区别
1.6.4 泛型后方法沦为“二等公民”
1.6.5 方法不支持泛型的原因
1.6.6 Go语言的泛型为何用方括号
1.7 自定义迭代器
1.7.1 使用迭代器
1.7.2 迭代器的定义
1.7.3 迭代器的原理
1.7.4 loopvar语义调整
1.8 补充说明
第2章 CGO编程
2.1 快速入门
2.1.1 最简CGO程序
2.1.2 基于C标准库函数输出字符串
2.1.3 使用自己的C语言函数
2.1.4 C代码的模块化
2.1.5 用Go重新实现C语言函数
2.1.6 面向C语言接口的Go编程
2.2 CGO基础
2.2.1 import "C"语句
2.2.2 #cgo命令
2.2.3 build标志条件编译
2.3 类型转换
2.3.1 数值类型的转换
2.3.2 Go字符串和切片的转换
2.3.3 结构体、联合和枚举类型的转换
2.3.4 数组、字符串和切片的转换
2.3.5 指针间的转换
2.3.6 数值和指针的转换
2.3.7 切片间的转换
2.4 函数调用
2.4.1 Go调用C语言函数
2.4.2 C语言函数的返回值
2.4.3 void函数的返回值
2.4.4 C调用Go导出函数
2.5 内存模型
2.5.1 Go访问C内存
2.5.2 C临时访问传入的Go内存
2.5.3 C长期持有Go指针对象
2.5.4 导出C语言函数不能返回Go内存
2.5.5 runtime.Pinner类型
2.6 C++类封装
2.6.1 C++类到Go语言对象
2.6.2 Go语言对象到C++类
2.6.3 彻底解放C++的this指针
2.7 MOSN带来的优化
2.8 补充说明
第3章 Go汇编语言
3.1 快速入门
3.1.1 实现和声明
3.1.2 定义整型变量
3.1.3 定义字符串类型变量
3.1.4 定义main()函数
3.1.5 特殊字符
3.1.6 没有分号
3.2 计算机体系结构
3.2.1 图灵机和Brainfuck语言
3.2.2 《人力资源机器》游戏
3.2.3 x86-64体系结构
3.2.4 Go汇编中的伪寄存器
3.2.5 x86-64指令集
3.2.6 ARM64指令集
3.3 常量和全局变量
3.3.1 常量
3.3.2 全局变量
3.3.3 变量的内存布局
3.3.4 标识符规则和特殊标志
3.4 函数
3.4.1 基本语法
3.4.2 函数参数和返回值
3.4.3 参数和返回值的内存布局
3.4.4 函数中的局部变量
3.4.5 调用其他函数
3.4.6 宏函数
3.5 控制流
3.5.1 顺序执行
3.5.2 if/goto跳转
3.5.3 for循环
3.6 再论函数
3.6.1 函数调用规范
3.6.2 高级汇编语言
3.6.3 PCDATA和FUNCDATA
3.6.4 递归函数:1到n求和
3.6.5 闭包函数
3.6.6 调用约定
3.7 汇编语言的威力
3.7.1 系统调用
3.7.2 直接调用C语言函数
3.7.3 AVX指令集
3.8 补充说明
第4章 Go运行时
4.1 运行时概览
4.1.1 调度器
4.1.2 内存分配器
4.1.3 垃圾收集器
4.1.4 网络轮询器
4.1.5 小结
4.2 调度器
4.2.1 生产者细节
4.2.2 消费者细节
4.2.3 任务队列细节
4.2.4 处理阻塞
4.2.5 理解调度和延迟的关系
4.2.6 小结
4.3 内存分配器
4.3.1 逃逸分析
4.3.2 操作系统内存管理的二次抽象
4.3.3 内存分配器简介
4.3.4 理解Go的内存占用
4.3.5 小结
4.4 垃圾收集器
4.4.1 语法垃圾和语义垃圾
4.4.2 并发标记清扫的核心流程
4.4.3 与Java分代机制的对比
4.4.4 一些常见的优化思路
4.4.5 小结
4.5 网络轮询器
4.5.1 传统网络编程
4.5.2 Go对操作系统的网络API的封装
4.5.3 阻塞易理解,回调难理解
4.5.4 goroutine的挂起和唤醒流程
4.5.5 网络轮询器的缺陷
4.5.6 小结
4.6 运行时性能分析
4.6.1 安装依赖的Graphviz工具
4.6.2 CPU性能测试分析
4.6.3 内存分配性能测试分析
4.6.4 在程序中增加性能分析
4.6.5 性能分析引导的优化
4.6.6 持续性能分析
4.6.7 堆内存性能分析
4.6.8 小结
4.7 补充说明
第5章 Go编译器
5.1 表达式
5.1.1 基础表达式语法
5.1.2 表达式的语法分析
5.1.3 求值表达式
5.1.4 标识符:为表达式中引入变量
5.2 类型检查
5.2.1 语义错误
5.2.2 go/types包
5.2.3 跨包的类型检查
5.2.4 小结
5.3 语义分析
5.3.1 名字空间
5.3.2 整体架构
5.3.3 小结
5.4 SSA 中间代码
5.4.1 SSA简介
5.4.2 生成SSA
5.4.3 SSA解释运行
5.4.4 SSA包的架构
5.4.5 小结
5.5 LLVM后端
5.5.1 最小编译器
5.5.2 表达式手动转换到LLVM IR程序
5.5.3 表达式自动转换到LLVM IR程序
5.5.4 小结
5.6 示例:检查append参数
5.6.1 append()函数的参数陷阱
5.6.2 Go语言社区的不同观点
5.6.3 统计真实代码发现问题
5.6.4 go vet自动识别这类问题
5.7 补充说明
第6章 RPC和Protobuf
6.1 RPC入门
6.1.1 RPC版“Hello, World”
6.1.2 更安全的RPC接口
6.1.3 跨语言的RPC
6.1.4 HTTP上的RPC
6.2 Protobuf
6.2.1 Protobuf入门
6.2.2 定制代码生成插件
6.2.3 自动生成完整的RPC代码
6.3 玩转RPC
6.3.1 客户端RPC的实现原理
6.3.2 基于RPC实现监视功能
6.3.3 反向RPC
6.3.4 上下文信息
6.4 gRPC入门
6.4.1 gRPC技术栈
6.4.2 gRPC简介
6.4.3 gRPC流
6.4.4 发布/订阅模式
6.5 gRPC进阶
6.5.1 证书认证
6.5.2 令牌认证
6.5.3 截取器
6.5.4 与Web服务共存
6.6 gRPC和Protobuf扩展
6.6.1 验证器
6.6.2 REST风格的接口
6.6.3 Nginx
6.7 基于Protobuf的框架pbgo
6.7.1 Protobuf扩展语法
6.7.2 插件中读取扩展信息
6.7.3 生成REST风格的接口的代码
6.7.4 启动REST服务
6.8 补充说明
第7章 Go Web编程
7.1 Go Web编程简介
7.2 请求路由
7.2.1 HttpRouter简介
7.2.2 HttpRouter原理
7.2.3 压缩检索树创建过程
7.3 中间件
7.3.1 代码泥潭
7.3.2 使用中间件剥离非业务逻辑
7.3.3 更优雅的中间件写法
7.3.4 在中间件中适合做哪些事情
7.4 请求验证
7.4.1 重构请求验证函数
7.4.2 用请求验证器减少重复劳动
7.4.3 请求验证器原理
7.5 与数据库交互
7.5.1 从database/sql讲起
7.5.2 提高生产效率的ORM和SQL构建器
7.5.3 隐式SQL导致线上故障
7.5.4 基于SQLC的数据层开发
7.6 服务流量限制
7.6.1 流量限制算法——令牌桶算法
7.6.2 令牌桶算法原理
7.6.3 服务瓶颈和QoS
7.7 大型Web项目的分层
7.8 接口和表驱动开发
7.8.1 业务系统的发展过程
7.8.2 使用函数封装业务流程
7.8.3 使用接口进行抽象
7.8.4 接口的优缺点
7.8.5 表驱动开发
7.9 灰度发布
7.9.1 通过分批次部署实现灰度发布
7.9.2 通过业务规则进行灰度发布
7.9.3 如何实现灰度发布规则
7.10 现代Go语言后端编程
7.10.1 Go Micro
7.10.2 Kratos
7.10.3 go-zero
7.10.4 小结
7.11 补充说明
第8章 Go和WebAssembly
8.1 WebAssembly简介
8.1.1 诞生背景
8.1.2 终将被编译为WebAssembly
8.2 你好,WebAssembly
8.2.1 用Go语言生成并执行WebAssembly模块
8.2.2 在Node.js中执行WebAssembly模块
8.2.3 在浏览器中执行WebAssembly模块
8.2.4 小结
8.3 外部函数接口
8.3.1 使用JavaScript函数
8.3.2 回调Go语言函数
8.3.3 syscall/js包
8.3.4 WebAssembly模块的导入函数
8.3.5 WASI规范
8.4 WebAssembly虚拟机
8.4.1 构建WebAssembly模块
8.4.2 通过虚拟机执行
8.4.3 小结
8.5 示例:WebAssembly插件
8.5.1 MOSN的WebAssembly插件架构设计
8.5.2 认识Proxy-Wasm规范
8.5.3 处理HTTP请求示例
8.5.4 小结
8.6 导出Go语言函数
8.6.1 构建WebAssembly模块
8.6.2 执行WebAssembly模块
8.6.3 运行时限制
8.7 补充说明
第9章 Go GUI编程
9.1 Shiny框架入门
9.1.1 Hello, Shiny
9.1.2 显示图像
9.1.3 核心组件
9.1.4 底层驱动程序
9.2 Fyne框架入门
9.2.1 安装环境
9.2.2 安装Fyne核心库
9.2.3 Hello, Fyne
9.2.4 回调函数
9.2.5 对话框
9.2.6 画布
9.2.7 布局管理
9.2.8 Fyne在浏览器中
9.3 Walk框架入门
9.3.1 你好, Walk
9.3.2 声明式语法
9.3.3 通过.manifest文件指定依赖
9.3.4 内置.manifest文件
9.3.5 给可执行程序添加图标
9.3.6 添加版本信息
9.3.7 Walk的工作原理
9.4 国际化支持
9.4.1 你好,世界!
9.4.2 国际化实现原理
9.4.3 你好,世界!多语言版
9.4.4 制作翻译文件
9.4.5 本地的语言环境
9.4.6 为何如此烦琐
9.5 补充说明
第10章 大模型
10.1 AI机器人gabyhelp
10.1.2 如何接入大语言模型
10.1.3 小结
10.2 DeepSeek
10.2.1 生成API key
10.2.2 Go语言SDK
10.2.3 Go语言验证服务
10.2.4 多轮对话补全
10.2.5 推理模型
10.2.6 交互式对话
10.2.7 小结
10.3 LangChain for Go
10.3.1 连接OpenAI的大模型
10.3.2 连接DeepSeek
10.3.3 构建大模型聊天应用
10.3.4 小结
10.4 Ollama
10.4.1 安装Ollama
10.4.2 下载大模型
10.4.3 运行大模型
10.4.4 本地大模型驱动聊天应用
10.4.5 小结
10.5 大模型智能体
10.5.1 计算常量表达式
10.5.2 集成到大模型流程中
10.5.3 应用到聊天服务中
10.5.4 小结
10.6 补充说明
后记
买过这本书的人还买过
读了这本书的人还在读
同类图书排行榜