Go开发实用指南 说明

# Go开发实用指南 说明

Go语言凭借其简洁的语法和务实的惯例,已稳固确立了自身在开发者心中的地位,成为处理网络编程、Web服务、数据处理等领域开发的首选语言。本书旨在为工程师赋能,提供最新的实用方法,以解决常见的编程难题。

本书开篇介绍基础原理,涵盖针对各类项目类型组织包和构建代码结构的有效方法。随后深入探讨实际工程挑战,在网络编程、进程管理、数据库交互、数据管道和测试等方面提供切实可行的解决方案。每一章都提供了可运行的解决方案和适用于生产环境的代码片段,兼顾顺序编程和并发编程环境。

本书中的方法充分利用Go语言的最新特性,如泛型和结构化日志记录,并且主要依赖Go标准库,从而确保对第三方包的依赖降至最低,同时最大化兼容性。

阅读完本书,你将掌握大量经过验证的实践解决方案,加速你的Go开发之旅,自信应对现代软件工程的复杂性。

本书翻译自《Go Recipes for Developers》。

# 面向的读者

本书面向对Go语言有基本了解的开发者。经验更为丰富的开发者也可将其作为参考资料,书中提供的实际示例可应用于多种场景。

# 环境要求

你需要安装Go语言的较新版本(任何高于1.22的版本均可),并将其集成到你喜欢的开发环境中。部分示例程序会用到Docker。

# 章节结构

在本书中,你会经常看到几个标题(准备工作、操作方法……、原理说明……)。为清晰说明如何完成一个方法,各章节结构如下:

  • 准备工作:该部分会介绍本方法的预期内容,并说明为实现该方法所需进行的软件设置或初步配置。
  • 操作方法……:该部分包含实现该方法所需的步骤。
  • 原理说明……:该部分通常会详细解释上一部分的操作。

# 详细目录

  • 前言

  • 第1章 项目组织

    • 模块和包
    • 技术要求
    • 创建模块
      • 操作方法
    • 创建源文件目录结构
      • 操作方法
    • 构建和运行程序
      • 操作方法
    • 导入第三方包
      • 操作方法
    • 导入特定版本的包
      • 操作方法
    • 使用模块缓存
      • 操作方法
    • 使用内部包减少API 表面暴露
      • 操作方法
    • 使用模块的本地副本
      • 操作方法
    • 处理多个模块——工作区
      • 操作方法
    • 管理模块版本
      • 操作方法
    • 总结与拓展阅读
  • 第2章 字符串处理

    • 创建字符串
      • 操作方法
      • 原理说明
    • 格式化字符串
      • 操作方法
      • 原理说明
    • 组合字符串
      • 操作方法
      • 原理说明
    • 处理字符串大小写
      • 操作方法
      • 原理说明
      • 更多内容
    • 处理编码
      • 操作方法
      • 原理说明
    • 迭代字符串的字节和符文
      • 操作方法
      • 原理说明
    • 分割字符串
      • 操作方法
      • 原理说明
    • 逐行或逐词读取字符串
      • 操作方法
      • 原理说明
    • 修剪字符串两端
      • 操作方法
    • 正则表达式
      • 验证输入
      • 搜索模式
      • 从字符串中提取数据
        • 操作方法
        • 原理说明
      • 替换字符串部分内容
        • 操作方法
    • 模板
      • 值替换
      • 迭代
      • 变量和作用域
      • 更多内容——嵌套循环和条件语句
      • 处理空行
        • 操作方法
      • 模板组合
        • 操作方法
        • 原理说明
      • 模板组合——布局模板
        • 操作方法
        • 原理说明
      • 更多内容
  • 第3章 日期和时间处理

    • 处理Unix时间
      • 操作方法
    • 日期/时间组件
      • 操作方法
    • 日期/时间运算
      • 操作方法
      • 原理说明
    • 格式化和解析日期/时间
      • 操作方法
    • 处理时区
      • 操作方法
      • 原理说明
    • 存储时间信息
      • 操作方法
      • 原理说明
    • 定时器(Tickers)
      • 操作方法
      • 原理说明
    • 计时器(Timers)
      • 操作方法
      • 原理说明
  • 第4章 数组、切片和映射的使用

    • 处理数组
      • 创建数组并传递
      • 从数组创建切片
        • 操作方法
        • 原理说明
      • 追加/插入/删除切片元素
        • 操作方法
        • 原理说明
      • 使用切片实现栈
        • 操作方法
        • 原理说明
    • 处理切片
      • 创建切片
      • 原理说明
    • 处理映射
      • 定义、初始化和使用映射
        • 操作方法
      • 使用映射实现集合
        • 操作方法
        • 原理说明
      • 复合键
        • 操作方法
        • 原理说明
      • 使用映射实现线程安全缓存
        • 简单缓存
        • 操作方法
        • 原理说明
        • 具有阻塞行为的缓存
        • 操作方法
        • 原理说明
  • 第5章 类型、结构体和接口的使用

    • 创建新类型
      • 基于现有类型创建新类型
        • 操作方法
      • 创建类型安全的枚举
        • 操作方法
    • 创建结构体类型
      • 操作方法
    • 扩展类型
      • 扩展基础类型
        • 操作方法
        • 原理说明
    • 初始化结构体
      • 操作方法
    • 定义接口
      • 接口作为契约
        • 操作方法
      • 工厂模式
        • 操作方法
      • 在使用处定义接口
        • 操作方法
        • 原理说明
    • 使用函数作为接口
      • 操作方法
      • 原理说明
    • 在运行时发现数据类型的能力——测试“实现”关系
      • 操作方法
      • 原理说明
    • 测试接口值是否为已知类型之一
      • 操作方法
    • 在开发过程中确保类型实现接口
      • 操作方法
    • 决定方法使用指针接收器还是值接收器
      • 操作方法
      • 原理说明
    • 多态容器
      • 操作方法
      • 原理说明
    • 访问对象中未通过接口直接暴露的部分
      • 操作方法
    • 从嵌入结构体访问被嵌入结构体
      • 操作方法
    • 检查接口是否为nil
      • 操作方法
      • 原理说明
  • 第6章 泛型的使用

    • 泛型函数
      • 编写一个用于数字相加的泛型函数
      • 将约束声明为接口
      • 使用泛型函数作为访问器和适配器
      • 从泛型函数返回零值
      • 对泛型参数使用类型断言
    • 泛型类型
      • 编写类型安全的集合
      • 有序映射——使用多个类型参数
  • 第7章 并发编程

    • 使用goroutine并发执行任务
      • 创建goroutine
      • 并发运行多个独立函数并等待它们完成
    • 使用通道在goroutine之间通信
      • 使用通道发送和接收数据
      • 从多个goroutine向通道发送数据
      • 使用通道收集并发计算的结果
    • 使用select语句处理多个通道
    • 取消goroutine
    • 使用非阻塞select检测取消操作
    • 共享内存
    • 并发更新共享变量
  • 第8章 错误和异常处理

    • 返回和处理错误
      • 操作方法
      • 原理说明
    • 包装错误以添加上下文信息
      • 操作方法
      • 原理说明
    • 比较错误
      • 操作方法
    • 结构化错误
      • 操作方法
      • 原理说明
    • 从错误树中提取特定错误
      • 操作方法
      • 原理说明
    • 处理异常(Panics)
      • 必要时引发异常
        • 操作方法
      • 从异常中恢复
        • 操作方法
      • 原理说明
      • 在恢复过程中更改返回值
        • 操作方法
        • 原理说明
      • 捕获异常的堆栈跟踪信息
        • 操作方法
    • 包装结构化错误
      • 操作方法
      • 原理说明
    • 按类型比较结构化错误
      • 操作方法
  • 第9章 Context包的使用

    • 使用Context传递请求作用域的数据
      • 操作方法
      • 原理说明
      • 更多内容
    • 使用Context进行取消操作
      • 操作方法
      • 原理说明
    • 使用Context设置超时
      • 操作方法
      • 原理说明
      • 更多内容
    • 在服务器中使用取消操作和超时设置
      • 操作方法
  • 第10章 大数据处理

    • 工作池
      • 有上限的工作池
      • 固定大小的工作池
      • 连接池
    • 管道
      • 无扇出/扇入的简单管道
      • 以工作池为阶段的管道
      • 有扇出和扇入的管道
      • 处理大型结果集
      • 使用goroutine流式传输结果
  • 第11章 JSON处理

    • 编组/解组基础
      • 编码结构体
        • 操作方法
      • 处理嵌入结构体
        • 操作方法
      • 不定义结构体进行编码
        • 操作方法
      • 解码结构体
        • 操作方法
      • 使用接口、映射和切片进行解码
        • 操作方法
      • 处理缺失和可选值
        • 编码时忽略空字段
          • 操作方法
        • 解码时处理缺失字段
          • 操作方法
    • 自定义JSON编码/解码
      • 编组/解组自定义数据类型
        • 操作方法
      • 自定义对象键的编组/解组
        • 操作方法
      • 动态字段名
        • 操作方法
      • 多态数据结构
      • 分两步进行自定义解组
        • 操作方法
    • 流式处理JSON数据
      • 流式传输对象数组
        • 操作方法
      • 解析对象数组
        • 操作方法
      • 其他流式处理JSON的方式
    • 安全注意事项
      • 操作方法
  • 第12章 进程处理

    • 运行外部程序
      • 操作方法
      • 向进程传递参数
      • 展开参数
      • 通过Shell运行命令
    • 从子进程读取输出
      • 操作方法
    • 向子进程提供输入
      • 操作方法
    • 更改子进程的环境变量
      • 操作方法
    • 使用信号实现优雅终止
      • 操作方法
  • 第13章 网络编程

    • TCP网络编程
      • 编写TCP服务器
        • 操作方法
        • 原理说明
      • 编写基于行的TCP服务器
        • 操作方法
      • 使用TCP连接发送/接收文件
        • 操作方法
      • 编写TCP客户端
        • 操作方法
      • 编写TLS客户端/服务器
        • 操作方法
      • 用于TLS终止和负载均衡的TCP代理
        • 操作方法
      • 设置读写截止时间
        • 操作方法
      • 解除阻塞的读写操作
        • 操作方法
        • 原理说明
    • 编写UDP客户端/服务器
      • 操作方法
    • 使用HTTP
      • 发起HTTP调用
        • 操作方法
      • 运行HTTP服务器
        • 操作方法
      • HTTPS——设置TLS服务器
        • 操作方法
      • 编写HTTP处理器
        • 操作方法
      • 在文件系统上提供静态文件服务
        • 操作方法
      • 处理HTML表单
        • 操作方法
      • 编写用于下载大文件的处理器
        • 操作方法
      • 以流的方式处理HTTP上传的文件和表单
        • 操作方法
  • 第14章 流式输入/输出

    • 读取器/写入器
      • 从读取器读取数据
      • 向写入器写入数据
      • 从字节切片读取数据和向字节切片写入数据
      • 从字符串读取数据和向字符串写入数据
    • 文件操作
      • 创建和打开文件
      • 关闭文件
      • 从文件读取数据/向文件写入数据
      • 从特定位置读取/写入数据
      • 更改文件大小
      • 获取文件大小
      • 处理二进制数据
        • 操作方法
    • 数据复制
      • 复制文件
    • 文件系统操作
      • 处理文件名
      • 创建临时目录和文件
      • 读取目录
    • 管道操作
      • 将需要读取器的代码与需要写入器的代码连接起来
      • 使用TeeReader拦截读取器
  • 第15章 数据库操作

    • 连接数据库
      • 操作方法
    • 运行SQL语句
      • 不使用显式事务运行SQL语句
      • 使用事务运行SQL语句
      • 在事务中运行预编译语句
      • 从查询中获取值
        • 操作方法
    • 动态构建SQL语句
      • 构建UPDATE语句
        • 操作方法
      • 构建WHERE子句
        • 操作方法
  • 第16章 日志记录

    • 使用标准日志记录器
      • 写入日志消息
      • 控制格式
      • 更改日志输出位置
    • 使用结构化日志记录器
      • 使用全局日志记录器进行日志记录
      • 使用不同级别写入结构化日志
      • 在运行时更改日志级别
      • 使用带有额外属性的日志记录器
      • 更改日志输出位置
      • 从上下文添加日志信息
  • 第17章 测试、基准测试和性能分析

    • 单元测试
      • 编写单元测试
        • 操作方法
      • 运行单元测试
        • 操作方法
      • 测试中记录日志
        • 操作方法
      • 跳过测试
      • 测试HTTP服务器
        • 操作方法
      • 测试HTTP处理器
        • 操作方法
      • 检查测试覆盖率
        • 操作方法
    • 基准测试
      • 编写基准测试
        • 操作方法
      • 编写具有不同输入大小的多个基准测试
      • 运行基准测试
        • 操作方法
    • 性能分析
      • 操作方法
    • 另请参阅
上次更新: 2025/12/11, 15:37:43

社区交流

讨论与留言

前往 GitHub Issues →

本留言区仅对应当前文章,欢迎补充观点、提出问题或帮助修正文中疏漏。 留言由 GitHub/Gitalk 提供,需要使用 GitHub 登录。

最近更新
第 1 课:专栏导论与安全边界
07-01
第 3 课:安装编译与调试环境
07-01
第 4 课:第三方库下载、编译与依赖管理
07-01
更多文章>