goss: https://github.com/eleven26/goss
背景
一开始写这个东西只是为了写一个命令行工具,拿来将阿里云的 OSS 作为自己的一个临时的云盘,可以通过命令行上传下载一些文件。 当然可能有人会问那么多云盘为什么不用,简单来说就是觉得这些云盘用起来有点麻烦,你要打开网页或者打开客户端,我是大概是一个懒惰的人,只想省去这些繁琐的操作。 另外,这些云盘普遍有个特点就是上传下载速度往往比较慢,但用 OSS 来存储可以有一个较快的下载速度,只是会产生费用。
Goss 的优势
- 支持常见的对象存储:阿里云 OSS、腾讯云 COS、七牛云 kodo、华为云 OBS。
- 完善的测试:有完善的单元测试、集成测试。
- 容易使用的接口:通过
storage.Put
等方式就可以上传下载文件,隐藏了繁琐的细节。 - 易扩展:实现了
Storage
接口即可。
Goss 提供的接口
goss 目前提供了常用的一些接口:
这些接口覆盖了我的需要了,所以目前就只提供了这些接口;
Put
上传文件到云存储。第一个参数是 key,第二个参数是
io.Reader
。
1 | data := []byte("this is some data stored as a byte slice in Go Lang!") |
PutFromFile
上传文件到云存储。第一个参数是 key,第二个参数是本地文件路径。
1 | err := storage.PutFromFile("test/test.txt", "/path/to/test.txt") |
Get
从云存储获取文件,返回字符串。参数是 key。返回值是
io.ReadCloser
和 error
。
1 | // rc 是 `io.ReadCloser` |
GetString
从云存储获取文件,返回字符串。参数是 key。返回值是
string
和 error
1 | content, err := storage.GetString("test/test.txt") |
GetBytes
从云存储获取文件,返回字符串。参数是 key。返回值是
[]byte
和 error
1 | bs, err := storage.Get("test/test.txt") |
GetToFile
下载云存储文件到本地。第一个参数是 key,第二个参数是本地路径。
1 | // 第一个参数是云端路径,第二个参数是本地路径 |
Delete
删除云存储文件。
1 | err := storage.Delete("test/test.txt") |
Exists
判断云存储文件是否存在。
1 | exists, err := storage.Exists("test/test.txt") |
Files
根据前缀获取文件列表。
1 | exists, err := storage.Files("test/") |
Size
获取云存储文件大小。
1 | size, err := storage.Size("test/test.txt") |
goss-cli
正如本文一开始说的,其实一开始是想做一个命令行工具的,最后写成了一个类库。
但是我的命令行工具也是存在的,从 goss 里面拆分出去了,成了 goss-cli
当然功能也是比较简单,但是也足够了,下面是一些示例:
help:
1 | ➜ goss -h |
list:
1 | ➜ goss list mac/ |
get:
1 | ➜ goss get mac/Go2Shell.dmg |