第一个 Go 程序:漫画下载器。用于练手 (练到肾虚的那种) 。
- 进入最新版本的文件夹
- 复制
config.json.example
为config.json
填写漫画主页地址、下载地址和漫画 ID。如果不知道 URL,就没办法下载了(逃 - 编译:
go build -o main.exe main.go
- 执行:
./main.exe
-
hello world
- 程序的结构
- 包的引用
- 编译和运行代码
- 函数/方法的可见性
fmt
库输出字符串
-
请求网页和写入文件
- 变量定义和赋值
- 字符串
- if 语句
- 无返回值的函数
net/http
库发起请求和接收响应io/ioutil
库将网页内容写入文件
-
漫画标题和下载 ID 的解析
- 结构体的定义和初始化
- 结构体的方法
- 单返回值的函数
fmt
库格式化输出字符串regexp
库正则表达式- 除了用正则,还可以用
goquery
来解析 html,但这里不使用。
- 除了用正则,还可以用
-
代码整理,抽取函数
- 多返回值的函数
- 自定义错误信息
strconv
库将字符串转为整数
-
代码整理,放到类里面
- 方法内部修改结构体的值(引用)
- 空白标识符
-
获取漫画的所有文件名
- 数组和切片的声明
- 字符串转 byte 切片
strings
库替换字符串encoding/json
库解析 Jsonfmt
库打印结构体
-
下载漫画
- 字符串类型元素的切片的初始化
- 字符串拼接
- for range 循环
- 普通的 for 循环
os
库获取当前所在工作目录的路径、判断文件或文件夹是否存在、创建文件夹strconv
库将整数转为字符串
-
并发下载漫画
- Go协程(goroutines)和通道(channel)
- 引用类型与 make()
- 匿名函数(闭包)
- defer
sync
库等待 goroutines 执行结束- 接口类型
- 类型转换
-
再次执行时避免下载已有页面
- 判断一个字符串是否存在于字符串切片中
- 往切片中添加元素
io/ioutil
库读取文件夹里的文件列表
-
将配置抽取到配置文件
- 获取程序所在的目录
io/ioutil
库读取文件内容
-
没有全部下载成功时重试
- 自定义错误类型