Skip to content

schaepher/comic-downloader-example

Repository files navigation

comic-downloader-example

第一个 Go 程序:漫画下载器。用于练手 (练到肾虚的那种)

使用方法

  1. 进入最新版本的文件夹
  2. 复制 config.json.exampleconfig.json
    填写漫画主页地址、下载地址和漫画 ID。如果不知道 URL,就没办法下载了(逃
  3. 编译:
    go build -o main.exe main.go
  4. 执行:
    ./main.exe

实现的功能和获得对应的实践

  1. hello world

    • 程序的结构
    • 包的引用
    • 编译和运行代码
    • 函数/方法的可见性
    • fmt 库输出字符串
  2. 请求网页和写入文件

    • 变量定义和赋值
    • 字符串
    • if 语句
    • 无返回值的函数
    • net/http 库发起请求和接收响应
    • io/ioutil 库将网页内容写入文件
  3. 漫画标题和下载 ID 的解析

    • 结构体的定义和初始化
    • 结构体的方法
    • 单返回值的函数
    • fmt 库格式化输出字符串
    • regexp 库正则表达式
      • 除了用正则,还可以用 goquery 来解析 html,但这里不使用。
  4. 代码整理,抽取函数

    • 多返回值的函数
    • 自定义错误信息
    • strconv 库将字符串转为整数
  5. 代码整理,放到类里面

    • 方法内部修改结构体的值(引用)
    • 空白标识符
  6. 获取漫画的所有文件名

    • 数组和切片的声明
    • 字符串转 byte 切片
    • strings 库替换字符串
    • encoding/json 库解析 Json
    • fmt 库打印结构体
  7. 下载漫画

    • 字符串类型元素的切片的初始化
    • 字符串拼接
    • for range 循环
    • 普通的 for 循环
    • os 库获取当前所在工作目录的路径、判断文件或文件夹是否存在、创建文件夹
    • strconv 库将整数转为字符串
  8. 并发下载漫画

    • Go协程(goroutines)和通道(channel)
    • 引用类型与 make()
    • 匿名函数(闭包)
    • defer
    • sync 库等待 goroutines 执行结束
    • 接口类型
    • 类型转换
  9. 再次执行时避免下载已有页面

    • 判断一个字符串是否存在于字符串切片中
    • 往切片中添加元素
    • io/ioutil 库读取文件夹里的文件列表
  10. 将配置抽取到配置文件

    • 获取程序所在的目录
    • io/ioutil 库读取文件内容
  11. 没有全部下载成功时重试

    • 自定义错误类型

About

第一个 Go 程序:漫画下载器

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages