Head First Go语言程序设计

Book description

你将从这本书中学到什么?

Go可以很容易地构建简单、可靠和高效的软件。本书可以让初级程序员很容易上手。虽然Go是为高性能网络和多处理而设计的, 但与Python和JavaScript一样,它易于阅读和使用。使用这本实用的实践指南,你将通过清晰的示例来学习如何编写Go代码。更重要的是,你将了解雇主希望入门级Go开发人员所知晓的约定和技术。

为什么这本书如此不同?

基于认知科学和学习理论的新研究,本书采用一种视觉丰富的格式来吸引你,而不是使用一种以文字为主的方法来使你昏昏欲睡。为什么要浪费时间在新的概念中挣扎?这种多感官的学习体验正是针对大脑真正的工作方式而设计的。

Table of contents

  1. 封面
  2. 扉页
  3. 译者序
  4. 作者简介
  5. 目录 (概要) (1/4)
  6. 目录 (概要) (2/4)
  7. 目录 (概要) (3/4)
  8. 目录 (概要) (4/4)
  9. 如何使用这本书 (1/2)
  10. 如何使用这本书 (2/2)
  11. 1. 让我们开始吧
    1. 准备好,出发
    2. Go Playground
    3. 这一切意味着什么
    4. 如果出了问题怎么办
    5. 调用函数
    6. Println函数
    7. 使用其他包中的函数
    8. 函数返回值
    9. Go程序模板
    10. 字符串
    11. 符文
    12. 布尔值
    13. 数字
    14. 数学运算与比较
    15. 类型
    16. 声明变量
    17. 零值
    18. 短变量声明
    19. 命名规则
    20. 转换
    21. 在你的计算机上安装Go
    22. 编译Go代码
    23. Go工具
    24. 使用“go run”快速尝试代码
    25. 你的Go工具箱
  12. 2. 接下来运行哪些代码
    1. 调用方法
    2. 评分
    3. 注释
    4. 获取用户的分数
    5. 函数或方法的多个返回值
    6. 选项1:使用空白标识符忽略错误返回值
    7. 选项2:处理错误
    8. 条件
    9. 有条件地记录致命错误
    10. 避免遮盖名字
    11. 将字符串转换为数字
    12. 块和变量的作用域
    13. 我们已经完成了评分程序
    14. 短变量声明中只有一个变量必须是新的
    15. 让我们创建一个游戏
    16. 包名与导入路径
    17. 生成随机数
    18. 从键盘获取整数
    19. 将猜测与目标进行比较
    20. 循环
    21. 初始化和标志(post)语句是可选的
    22. 循环和作用域
    23. 在我们的猜谜游戏中使用循环
    24. 使用“continue”和“break”跳过部分循环
    25. 中断我们的猜测循环
    26. 显示目标
    27. 画龙点睛
    28. 恭喜你,游戏结束了
    29. 你的Go工具箱
  13. 3. 调用
    1. 一些重复的代码
    2. 使用Printf和Sprintf格式化输出
    3. 格式化动词
    4. 格式化值宽度
    5. 格式化小数宽度
    6. 在油漆计算器中使用Printf
    7. 声明函数
    8. 声明函数参数
    9. 在油漆计算器中使用函数
    10. 函数和变量的作用域
    11. 函数返回值
    12. 在油漆计算器中使用返回值
    13. paintNeeded函数需要错误处理
    14. 错误值
    15. 声明多个返回值
    16. 在paintNeeded函数中使用多个返回值
    17. 始终处理错误
    18. 函数形参接收实参的副本
    19. 指针
    20. 指针类型
    21. 获取或更改指针的值
    22. 函数指针
    23. 使用指针修复我们的“double”函数
    24. 你的Go工具箱
  14. 4. 代码集
    1. 不同的程序,相同的函数
    2. 使用包在程序之间共享代码
    3. Go工作区目录保存包代码
    4. 创建一个新包
    5. 将包导入程序
    6. 包使用相同的文件布局
    7. 包命名规范
    8. 包限定符
    9. 将共享代码移动到包中
    10. 常量
    11. 嵌套的包目录和导入路径
    12. 使用“go install”安装程序可执行文件
    13. 使用GOPATH环境变量更改工作区
    14. 设置GOPATH
    15. 发布包
    16. 使用“go get”下载和安装包
    17. 使用“go doc”阅读包文档
    18. 使用doc注释记录包
    19. 在Web浏览器中查看文档
    20. 使用“godoc”提供HTML文档
    21. “godoc”服务器包含你的包
    22. 你的Go工具箱
  15. 5. 列表
    1. 数组保存值的集合
    2. 数组中的零值
    3. 数组字面量
    4. “fmt”包中的函数知道如何处理数组
    5. 在循环里访问数组元素
    6. 使用“len”函数检查数组长度
    7. 使用“for...range”安全遍历数组
    8. 在“for...range”循环中使用空白标识符
    9. 得到数组中数字之和
    10. 得到数组中数字的平均值
    11. 读取文本文件
    12. 将文本文件读入数组
    13. 更新我们的“average”程序来读取文本文件
    14. 我们的程序只能处理三个值
    15. 你的Go工具箱
  16. 6. 追加的问题
    1. 切片
    2. 切片字面量
    3. 切片运算符
    4. 底层数组
    5. 修改底层数组,修改切片
    6. 使用“append”函数在切片上添加数据
    7. 切片和零值
    8. 使用切片和“append”读取额外的文件行
    9. 尝试我们改进后的程序
    10. 出错时返回nil值切片
    11. 命令行参数
    12. 从os.Args切片获取命令行参数
    13. 切片运算符可用于其他切片
    14. 更新程序以使用命令行参数
    15. 可变长参数函数
    16. 使用可变长参数函数
    17. 使用可变长参数函数计算平均值
    18. 向可变长参数函数传递一个切片
    19. 切片拯救了我们
    20. 你的Go工具箱
  17. 7. 标签数据
    1. 计票
    2. 从文件中读取名字
    3. 使用困难的切片方法对名字计数
    4. 映射
    5. 映射字面量
    6. 映射中的零值
    7. 映射变量的零值是nil
    8. 如何区分已经赋值的值和零值
    9. 使用“delete”函数删除键/值对
    10. 使用映射来更新计票程序
    11. 对映射进行for...range循环
    12. for...range循环以随机顺序处理映射
    13. 使用for...range 循环来更新计票程序
    14. 计票程序完成
    15. 你的Go工具箱
  18. 8. 构建存储
    1. 切片和映射保存一种类型的值
    2. struct是由多种类型的值构建的
    3. 使用点运算符访问struct字段
    4. 在struct中保存订阅者的数据
    5. 定义类型和struct
    6. 为杂志订阅者定义一个类型
    7. 与函数一起使用已定义类型
    8. 使用函数修改struct
    9. 通过指针访问struct的字段
    10. 使用指针传递大型struct
    11. 将struct类型移动到另一个包
    12. 定义类型的名称首字母必须大写才能导出该类型
    13. struct字段的名称首字母必须大写才能导出该字段
    14. struct字面量
    15. 创建一个Employee struct类型
    16. 创建一个Address struct类型
    17. 将struct作为字段增加到另一个类型中
    18. 在另一个struct中设置struct
    19. 匿名struct字段
    20. 嵌入struct
    21. 我们定义的类型完成了
    22. 你的Go工具箱
  19. 9. 我喜欢的类型
    1. 现实生活中的类型错误
    2. 具有底层基础类型的定义类型
    3. 定义类型和运算符
    4. 使用函数进行类型转换
    5. 使用方法修复函数名冲突
    6. 定义方法
    7. 接收器参数(几乎)就是另一个参数
    8. 方法(几乎)就像一个函数
    9. 指针类型的接收器参数
    10. 使用方法将Liters和Milliliters转换为Gallons
    11. 使用方法将Gallons转换为Liters和Milliliters
    12. 你的Go工具箱
  20. 10. 保密
    1. 创建一个日期struct类型
    2. 人们将Date struct的字段设置为无效值
    3. setter方法
    4. setter方法需要指针接收器
    5. 添加其余的setter方法
    6. 在setter方法中添加校验
    7. 字段仍可以设置为无效值
    8. 将Date类型移到另外的包中
    9. 将Date字段设为未导出状态
    10. 通过导出的方法访问未导出的字段
    11. getter方法
    12. 封装
    13. 在Event类型中嵌入Date类型
    14. 未导出的字段不会被提升
    15. 导出的方法像字段一样被提升
    16. 封装Event的Title字段
    17. 提升的方法与外部类型的方法共存
    18. 我们的calendar包完成了
    19. 你的Go工具箱
  21. 11. 你能做什么
    1. 具有相同方法的两种不同类型
    2. 只能接受一种类型的方法参数
    3. 接口
    4. 定义满足接口的类型
    5. 具体类型和接口类型
    6. 分配满足接口的任何类型
    7. 你只能调用接口中定义的方法
    8. 使用接口修复playList函数
    9. 类型断言
    10. 类型断言失败
    11. 当类型断言失败时避免异常
    12. 使用类型断言测试TapePlayer和TapeRecorder
    13. “error”接口
    14. Stringer接口
    15. 空接口
    16. 你的Go工具箱
  22. 12. 重新站起来
    1. 从文件中读取数字,重新访问
    2. 任何错误都将阻止关闭文件
    3. 延迟函数调用
    4. 使用延迟函数调用从错误中恢复
    5. 使用延迟函数调用确保文件关闭
    6. 列出目录中的文件
    7. 列出子目录中的文件(会更棘手)
    8. 递归函数调用
    9. 递归地列出目录内容
    10. 递归函数中的错误处理
    11. 发起一个panic
    12. 堆栈跟踪
    13. 延迟调用在崩溃前完成
    14. 通过scanDirectory使用“panic”
    15. 何时产生panic
    16. “recover”函数
    17. panic值从recover中返回
    18. 从scanDirectory中的panic恢复
    19. 恢复panic
    20. 你的Go工具箱
  23. 13. 分享工作
    1. 检索网页
    2. 多任务
    3. 使用goroutine的并发性
    4. 使用goroutine
    5. 在responseSize函数中使用goroutine
    6. 我们不能直接控制goroutine何时运行
    7. go语句不能使用返回值
    8. 使用channel发送和接收值
    9. 同步goroutine与channel
    10. 观察goroutine同步
    11. 使用channel修复我们的网页大小程序
    12. 更新我们的channel以携带一个struct
    13. 你的Go工具箱
  24. 14. 代码的质量保证
    1. 自动化测试比别人先发现bug
    2. 一个应该有自动化测试的函数
    3. 我们引入了一个bug
    4. 编写测试
    5. 使用“go test”命令运行测试
    6. 测试实际的返回值
    7. 使用“Errorf”方法获得更详细的测试失败消息
    8. 测试“helper”函数
    9. 让测试通过
    10. 测试驱动开发
    11. 另一个需要修复的bug
    12. 运行特定的测试集
    13. 表驱动测试
    14. 使用测试修复panic代码
    15. 你的Go工具箱
  25. 15. 响应请求
    1. 用Go编写Web应用程序
    2. 浏览器、请求、服务器和响应
    3. 一个简单的Web应用程序
    4. 你的计算机在自言自语
    5. 讲解一个简单的Web应用程序
    6. 资源路径
    7. 对不同的资源路径做出不同的响应
    8. 一级函数
    9. 将函数传递给其他函数
    10. 函数作为类型
    11. 接下来是什么
    12. 你的Go工具箱
  26. 16. 要遵循的模式
    1. 留言簿应用程序
    2. 处理请求和检查错误的函数
    3. 设置一个项目目录并尝试应用程序
    4. 用HTML创建签名列表
    5. 使我们的应用程序以HTML响应
    6. “text/template”包
    7. 使用带有模板的Execute方法的io.Writer接口
    8. 满足io.Writer的ResponseWriter和os.Stdout
    9. 使用action将数据插入模板
    10. 使用“if”action使模板的某些部分可选
    11. 使用“range”action来重复模板的某部分
    12. 使用action将struct字段插入模板
    13. 从文件中读入签名切片
    14. 保存签名和签名数的struct
    15. 更新模板以包含签名
    16. 允许用户使用HTML表单添加数据
    17. 使用HTML表单进行响应
    18. 表单提交请求
    19. 用于表单提交的Path和HTTP方法
    20. 从请求中获取表单字段的值
    21. 保存表单数据
    22. HTTP重定向
    23. 让我们一起来试试吧
    24. 我们完整的应用程序代码
    25. 你的Go工具箱
  27. A. 理解os.OpenFile
    1. 理解os.OpenFile
    2. 将标志常量传递到os.OpenFile
    3. 二进制表示法
    4. 位运算符
    5. 按位与运算符
    6. 按位或运算符
    7. 对“os”包常量使用按位或运算
    8. 使用按位或运算修复os.OpenFile选项
    9. Unix样式的文件权限
    10. 使用os.FileMode类型表示权限
    11. 八进制表示法
    12. 将八进制值转换为FileMode值
    13. 解释对os.OpenFile的调用
  28. B. 有六件事我们没有涉及
    1. #1“if”的初始化语句
    2. #2 switch语句
    3. #3 更多基本类型
    4. #4 更多关于符文的信息
    5. #5 有缓冲的channel
    6. #6 进一步阅读
  29. 索引 (1/4)
  30. 索引 (2/4)
  31. 索引 (3/4)
  32. 索引 (4/4)
  33. 这不是再见

Product information

  • Title: Head First Go语言程序设计
  • Author(s): Jay McGavren
  • Release date: September 2020
  • Publisher(s): China Machine Press
  • ISBN: 9787111664932