目录

前言

Go语言优势

Go 语言被广泛应用的原因

关于《Go语言高级编程(第2版)》

编辑推荐

内容简介

作者简介

图书目录

《Go语言高级编程(第2版)》全书速览

结束语


前言

众所周知,Go(Golang)语言是一门由Google于2009年推出的静态强类型、编译型编程语言,其设计初衷是解决大规模软件工程中的复杂性、开发效率与系统性能之间的矛盾。它以“简洁、高效、可靠”为核心哲学,通过精简的语言特性(仅25个关键字)、显式错误处理机制和强制代码格式化,彻底摒弃语法歧义与风格争议,让开发者能专注于业务逻辑而非语言细节。那么本文就来分享一下Go语言相关的话题。

Go语言优势

如今,在数字化与AI化的浪潮中,Go语言以“大道至简,行稳致远”的姿态,开始重塑现代软件开发的底层逻辑。在云计算与微服务主导的当下,其极简语法与原生并发能力,让开发者得以在复杂系统中保持代码的清晰与可控,从硅谷独角兽到国内头部企业,Go已成为构建高可用后端服务的“隐形标准”。而随着AI工程化浪潮涌起,Go凭借接近底层的执行效率与跨平台稳定性,悄然渗透至模型推理、实时数据处理等关键环节,与Python形成“高低搭配”的技术矩阵。

在Google I/O 2025大会上,Go 产品负责人 Cameron Balahan 和开发者关系负责人 Marc Dougherty 详细阐述了 Go 语言在生产力、生产就绪度和开发者体验方面的最新进展及未来规划。演讲强调了 Go 语言以规模化为核心的设计理念及其三大指导原则:生产力、超越语言的完整体验和生产就绪。

▲Cameron Balahan

Go 语言被广泛应用的原因

Go 拥有许多特性,是构建生产系统的绝佳语言。像高效的网络库和集成的结构体标签这样的特性,使其非常适合构建分布式系统。这也是 Go 在云基础设施和服务中如此普遍的重要原因。同样地,这些原因也使得 Go 成为当今构建 AI 基础设施和服务的绝佳选择。

流行的生成式 AI 工具和库,如 Ollama、Local AI、LangChain Go、Genkit 等,都是用 Go 编写的。就像之前的主要基础设施项目一样,这些工具和库利用 Go 的生产力和生产就绪性来创建高度可扩展且更可靠的关键任务服务,数百万来自不同语言生态系统的开发者依赖这些服务来支持其 AI 驱动的工作负载。随着 Go 语言在云基础设施、AI 基础设施与服务领域的广泛应用,众多关键任务服务均依托 Go 搭建,这不仅彰显了Go强大的技术实力,也为就业市场带来了新的机遇与活力。

掌握 Go 语言的开发者,能够投身于如火如荼的云服务与 AI 领域,参与构建高效、可靠的系统,满足不同行业对技术支撑的迫切需求,在当下及未来的就业浪潮中占据有利位置,拥有广阔的职业发展空间。

关于《Go语言高级编程(第2版)》

接下来给大家推荐一本关于Go语言的书籍,这是一本关于如何用Go做高性能开发的干货图书,一经上市就登上了当当“计算机与互联网”图书排行榜前列。本书从Go语言原理剖析讲起到实战技巧,助开发者在日常高并发实战工作中轻松维护!另外,关注本文博主,点赞+收藏本文,且在本文评论区评论“入手Go语言”,将选取三名幸运读者送出纸质版《Go语言高级编程(第2版)》一本,截止时间:2025.09.09。入手《Go语言高级编程(第2版)》传送门:京东验证 或者 《Go语言高级编程(第2版)》(柴树杉 曹春晖)【简介_书评_在线阅读】 - 当当图书 ,个人觉得这本书非常的不错,是一本不可多得的好书,值得拥有去学习。

编辑推荐

适读人群 :本书适合对Go语言有一定基础,希望深入理解其底层机制和高级应用的开发者阅读。无论是系统工程师、后端开发者,还是对Go语言运行时、编译器及新兴技术感兴趣的Go程序员,都能在本书中找到翔实的技术解析和实践指南,达到高效开发和技术进阶的目的。本书适合对Go语言有一定基础,希望深入理解其底层机制和高级应用的开发者阅读。无论是系统工程师、后端开发者,还是对Go语言运行时、编译器及新兴技术感兴趣的Go程序员,都能在本书中找到翔实的技术解析和实践指南,达到高效开发和技术进阶的目的。

  • 实践导向,解析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

《Go语言高级编程(第2版)》全书速览

结束语

通过本文的介绍,对于系统工程师而言,《Go语言高级编程(第2版)》这本书是深入理解Go语言在底层系统编程中的优势的绝佳资料。它详细阐述了Go语言如何高效地管理内存、调度goroutine以及处理并发,这些知识对于构建高性能、高并发的系统至关重要。通过阅读本书,系统工程师可以更加自信地运用Go语言来解决复杂的系统问题,提升系统的稳定性和可扩展性。而后端开发者则能从这本书中找到提升开发效率和服务质量的钥匙。书中对Go语言在Web编程、RPC和微服务架构中的应用进行了深入探讨,通过丰富的案例和实战经验分享,帮助开发者快速掌握Go语言在后端服务开发中的最佳实践。无论是构建高并发的Web应用,还是设计可扩展的微服务架构,这本书都能提供有力的支持。更为难得的是,这本书还吸引了对Go语言运行时、编译器等底层技术感兴趣的技术爱好者。它不仅仅停留在表面技术的介绍上,更深入Go语言的内部实现,揭示了Go语言如何高效地运行和编译。通过阅读本书,读者可以了解到Go语言调度器的精妙设计、内存管理器的优化策略以及编译器的各个阶段,这些知识对于提升读者的技术深度和广度具有不可估量的价值。总之,《Go语言高级编程(第2版)》是一本能够切实提升你Go语言技术水平、拓展技术视野的实用指南。无论你是初学者还是有一定经验的开发者,都能根据自己的水平找到合适的学习起点。书中丰富的代码示例和详细的注释,让你能够轻松掌握书中的知识点,并拥有实战能力。

Logo

加入「COC·上海城市开发者社区」,成就更好的自己!

更多推荐