万本电子书0元读

万本电子书0元读

顶部广告

Head First Go语言程序设计电子书

售       价:¥

纸质售价:¥81.90购买纸书

57人正在读 | 0人评论 6.8

作       者:(美)杰伊·麦克格瑞恩(Jay McGavren)

出  版  社:机械工业出版社

出版时间:2020-09-01

字       数:19.6万

所属分类: 科技 > 计算机/网络 > 程序设计

温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印

为你推荐

  • 读书简介
  • 目录
  • 累计评论(1条)
  • 读书简介
  • 目录
  • 累计评论(1条)
Go是为高性能网络和多处理而设计的, 但与python和javascript一样,该语言易于阅读和使用。通过这本实用的实践指南,读者将学习如何使用演示实际语言的清晰示例来编写Go代码。*重要的是,读者将会了解到用人单位希望门级Go发人员所知晓的惯例和技术。主要内容包括语法基础、条件和循环、函数、包、数组、映射、结构、封装和嵌、口、故障恢复、共享、自动化测试、Web应用程序等。<br/>
目录展开

译者序

作者简介

前言

这本书是给谁看的

我们知道你在想什么

我们知道你的大脑在想什么

元认知:思考“何为思考”

我们是这样做的

说明

致谢

O’Reilly在线学习

1 让我们开始吧:语法基础

准备好,出发

Go Playground

这一切意味着什么

如果出了问题怎么办

调用函数

Println函数

使用其他包中的函数

函数返回值

Go程序模板

字符串

符文

布尔值

数字

数学运算与比较

类型

声明变量

零值

短变量声明

命名规则

转换

在你的计算机上安装Go

编译Go代码

Go工具

使用“go run”快速尝试代码

你的Go工具箱

2 接下来运行哪些代码:条件和循环

调用方法

评分

函数或方法的多个返回值

选项1:使用空白标识符忽略错误返回值

选项2:处理错误

条件

有条件地记录致命错误

避免遮盖名字

将字符串转换为数字

块和变量的作用域

我们已经完成了评分程序

短变量声明中只有一个变量必须是新的

让我们创建一个游戏

包名与导入路径

生成随机数

从键盘获取整数

将猜测与目标进行比较

循环

初始化和标志(post)语句是可选的

在我们的猜谜游戏中使用循环

中断我们的猜测循环

显示目标

恭喜你,游戏结束了

你的Go工具箱

3 调用:函数

一些重复的代码

使用Printf和Sprintf格式化输出

格式化动词

格式化值宽度

格式化小数宽度

在油漆计算器中使用Printf

声明函数

声明函数参数

在油漆计算器中使用函数

函数和变量的作用域

函数返回值

在油漆计算器中使用返回值

paintNeeded函数需要错误处理

错误值

声明多个返回值

在paintNeeded函数中使用多个返回值

始终处理错误

函数形参接收实参的副本

指针

指针类型

获取或更改指针的值

函数指针

使用指针修复我们的“double”函数

你的Go工具箱

4 代码集:包

不同的程序,相同的函数

使用包在程序之间共享代码

Go工作区目录保存包代码

创建一个新包

将包导入程序

包使用相同的文件布局

包命名规范

包限定符

将共享代码移动到包中

常量

嵌套的包目录和导入路径

使用“go install”安装程序可执行文件

使用GOPATH环境变量更改工作区

设置GOPATH

发布包

使用“go get”下载和安装包

使用“go doc”阅读包文档

使用doc注释记录包

在Web浏览器中查看文档

使用“godoc”提供HTML文档

“godoc”服务器包含你的包

你的Go工具箱

5 列表:数组

数组保存值的集合

数组中的零值

数组字面量

“fmt”包中的函数知道如何处理数组

在循环里访问数组元素

使用“len”函数检查数组长度

使用“for...range”安全遍历数组

在“for...range”循环中使用空白标识符

得到数组中数字之和

得到数组中数字的平均值

读取文本文件

将文本文件读入数组

更新我们的“average”程序来读取文本文件

我们的程序只能处理三个值

你的Go工具箱

6 追加的问题:切片

切片

切片字面量

切片运算符

底层数组

修改底层数组,修改切片

使用“append”函数在切片上添加数据

切片和零值

使用切片和“append”读取额外的文件行

尝试我们改进后的程序

出错时返回nil值切片

命令行参数

从os.Args切片获取命令行参数

切片运算符可用于其他切片

更新程序以使用命令行参数

可变长参数函数

使用可变长参数函数

使用可变长参数函数计算平均值

向可变长参数函数传递一个切片

切片拯救了我们

你的Go工具箱

7 标签数据:映射

计票

从文件中读取名字

使用困难的切片方法对名字计数

映射

映射字面量

映射中的零值

映射变量的零值是nil

如何区分已经赋值的值和零值

使用“delete”函数删除键/值对

使用映射来更新计票程序

对映射进行for...range循环

for...range循环以随机顺序处理映射

使用for...range循环来更新计票程序

计票程序完成

你的Go工具箱

8 构建存储:struct

切片和映射保存一种类型的值

struct是由多种类型的值构建的

使用点运算符访问struct字段

在struct中保存订阅者的数据

定义类型和struct

为杂志订阅者定义一个类型

与函数一起使用已定义类型

使用函数修改struct

通过指针访问struct的字段

使用指针传递大型struct

将struct类型移动到另一个包

定义类型的名称首字母必须大写才能导出该类型

struct字段的名称首字母必须大写才能导出该字段

struct字面量

创建一个Employee struct类型

创建一个Address struct类型

将struct作为字段增加到另一个类型中

在另一个struct中设置struct

匿名struct字段

嵌入struct

我们定义的类型完成了

你的Go工具箱

9 我喜欢的类型:定义类型

现实生活中的类型错误

具有底层基础类型的定义类型

定义类型和运算符

使用函数进行类型转换

使用方法修复函数名冲突

定义方法

接收器参数(几乎)就是另一个参数

方法(几乎)就像一个函数

指针类型的接收器参数

使用方法将Liters和Milliliters转换为Gallons

使用方法将Gallons转换为Liters和Milliliters

你的Go工具箱

10 保密:封装和嵌入

创建一个日期struct类型

人们将Date struct的字段设置为无效值

setter方法

setter方法需要指针接收器

添加其余的setter方法

在setter方法中添加校验

字段仍可以设置为无效值

将Date类型移到另外的包中

将Date字段设为未导出状态

通过导出的方法访问未导出的字段

getter方法

封装

在Event类型中嵌入Date类型

未导出的字段不会被提升

导出的方法像字段一样被提升

封装Event的Title字段

提升的方法与外部类型的方法共存

我们的calendar包完成了

你的Go工具箱

11 你能做什么:接口

具有相同方法的两种不同类型

只能接受一种类型的方法参数

接口

定义满足接口的类型

具体类型和接口类型

分配满足接口的任何类型

你只能调用接口中定义的方法

使用接口修复playList函数

类型断言

类型断言失败

当类型断言失败时避免异常

使用类型断言测试TapePlayer和TapeRecorder

“error”接口

Stringer接口

空接口

你的Go工具箱

12 重新站起来:从失败中恢复

从文件中读取数字,重新访问

任何错误都将阻止关闭文件

延迟函数调用

使用延迟函数调用从错误中恢复

使用延迟函数调用确保文件关闭

列出目录中的文件

列出子目录中的文件(会更棘手)

递归函数调用

递归地列出目录内容

递归函数中的错误处理

发起一个panic

堆栈跟踪

延迟调用在崩溃前完成

通过scanDirectory使用“panic”

何时产生panic

“recover”函数

panic值从recover中返回

从scanDirectory中的panic恢复

恢复panic

你的Go工具箱

13 分享工作:goroutine和channel

检索网页

多任务

使用goroutine的并发性

使用goroutine

在responseSize函数中使用goroutine

我们不能直接控制goroutine何时运行

go语句不能使用返回值

使用channel发送和接收值

同步goroutine与channel

观察goroutine同步

使用channel修复我们的网页大小程序

更新我们的channel以携带一个struct

你的Go工具箱

14 代码的质量保证:自动化测试

自动化测试比别人先发现bug

一个应该有自动化测试的函数

我们引入了一个bug

编写测试

使用“go test”命令运行测试

测试实际的返回值

使用“Errorf”方法获得更详细的测试失败消息

测试“helper”函数

让测试通过

测试驱动开发

另一个需要修复的bug

运行特定的测试集

表驱动测试

使用测试修复panic代码

你的Go工具箱

15 响应请求:Web应用程序

用Go编写Web应用程序

浏览器、请求、服务器和响应

一个简单的Web应用程序

你的计算机在自言自语

讲解一个简单的Web应用程序

资源路径

对不同的资源路径做出不同的响应

一级函数

将函数传递给其他函数

函数作为类型

接下来是什么

你的Go工具箱

16 要遵循的模式:HTML模板

留言簿应用程序

处理请求和检查错误的函数

设置一个项目目录并尝试应用程序

用HTML创建签名列表

使我们的应用程序以HTML响应

“text/template”包

使用带有模板的Execute方法的io.Writer接口

满足io.Writer的ResponseWriter和os.Stdout

使用action将数据插入模板

使用“if”action使模板的某些部分可选

使用“range”action来重复模板的某部分

使用action将struct字段插入模板

从文件中读入签名切片

保存签名和签名数的struct

更新模板以包含签名

允许用户使用HTML表单添加数据

表单提交请求

用于表单提交的Path和HTTP方法

从请求中获取表单字段的值

保存表单数据

HTTP重定向

我们完整的应用程序代码

你的Go工具箱

A 理解os.OpenFile:打开文件

理解os.OpenFile

将标志常量传递到os.OpenFile

二进制表示法

位运算符

按位与运算符

按位或运算符

对“os”包常量使用按位或运算

使用按位或运算修复os.OpenFile选项

Unix样式的文件权限

使用os.FileMode类型表示权限

八进制表示法

将八进制值转换为FileMode值

解释对os.OpenFile的调用

B 有六件事我们没有涉及:剩下的内容

#1 “if”的初始化语句

#2 switch语句

#3 更多基本类型

#4 更多关于符文的信息

#5 有缓冲的channel

#6 进一步阅读

索引

累计评论(1条) 1个书友正在讨论这本书 发表评论

发表评论

发表评论,分享你的想法吧!

买过这本书的人还买过

读了这本书的人还在读

回顶部