展开全部

主编推荐语

全面讲解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生态系统中的应用场景。

目录

  • 版权信息
  • 内容提要
  • 序一
  • 序二
  • 前言
  • 第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 补充说明
  • 后记
展开全部

评分及书评

尚无评分
目前还没人评分

出版方

人民邮电出版社

人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。