MinIO
MinIO 是一个高性能、分布式的对象存储服务,兼容 Amazon S3 API。Go 中的 MinIO 用法非常简单,下面是如何在 Go 项目中使用 MinIO 的基本步骤:
1. 安装 MinIO Go 客户端
首先,需要安装 MinIO Go 客户端库。可以使用 go get 安装:
bash
go get github.com/minio/minio-go/v72. 初始化 MinIO 客户端
在 Go 中使用 MinIO,首先需要创建一个 MinIO 客户端实例。以下是初始化客户端的代码:
go
package main
import (
"log"
"github.com/minio/minio-go/v7"
"github.com/minio/minio-go/v7/pkg/credentials"
)
func main() {
// 配置 MinIO 客户端
endpoint := "localhost:9000" // MinIO 服务器的地址
accessKeyID := "your-access-key" // Access Key
secretAccessKey := "your-secret-key" // Secret Key
useSSL := false // 是否使用 SSL
// 初始化 MinIO 客户端
client, err := minio.New(endpoint, &minio.Options{
Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
Secure: useSSL,
})
if err != nil {
log.Fatalln(err)
}
log.Println("MinIO Client initialized successfully")
}3. 创建存储桶 (Bucket)
要在 MinIO 中存储文件,首先需要创建一个存储桶。以下是如何创建一个存储桶的代码:
go
bucketName := "my-bucket"
location := "us-east-1"
// 创建存储桶
err = client.MakeBucket(context.Background(), bucketName, minio.MakeBucketOptions{
Region: location,
})
if err != nil {
if exists, _ := client.BucketExists(context.Background(), bucketName); exists {
log.Printf("Bucket %s already exists.\n", bucketName)
} else {
log.Fatalln(err)
}
}
log.Printf("Bucket %s created successfully.\n", bucketName)4. 上传文件到 MinIO
上传文件到 MinIO 存储桶,可以使用 PutObject 方法:
go
objectName := "test-file.txt"
filePath := "/path/to/your/file.txt"
contentType := "text/plain"
// 上传文件
_, err = client.FPutObject(context.Background(), bucketName, objectName, filePath, minio.PutObjectOptions{ContentType: contentType})
if err != nil {
log.Fatalln(err)
}
log.Printf("File %s uploaded successfully.\n", objectName)5. 下载文件
从 MinIO 下载文件可以使用 GetObject 方法:
go
objectName := "test-file.txt"
filePath := "/path/to/destination/file.txt"
// 下载文件
err = client.FGetObject(context.Background(), bucketName, objectName, filePath, minio.GetObjectOptions{})
if err != nil {
log.Fatalln(err)
}
log.Printf("File %s downloaded successfully.\n", objectName)6. 列举存储桶中的对象
如果你想列举存储桶中的所有对象,可以使用 ListObjects 方法:
go
objects := client.ListObjects(context.Background(), bucketName, minio.ListObjectsOptions{Recursive: true})
for object := range objects {
if object.Err != nil {
log.Fatalln(object.Err)
}
log.Printf("Found object: %s\n", object.Key)
}7. 删除文件
要从 MinIO 中删除文件,可以使用 RemoveObject 方法:
go
objectName := "test-file.txt"
// 删除文件
err = client.RemoveObject(context.Background(), bucketName, objectName, minio.RemoveObjectOptions{})
if err != nil {
log.Fatalln(err)
}
log.Printf("File %s deleted successfully.\n", objectName)总结
- 初始化客户端:通过
minio.New()来创建客户端。 - 创建存储桶:使用
MakeBucket()方法来创建存储桶。 - 上传文件:通过
FPutObject()方法上传文件。 - 下载文件:使用
FGetObject()方法来下载文件。 - 列举对象:通过
ListObjects()方法列出存储桶中的所有对象。 - 删除文件:使用
RemoveObject()删除文件。
这样,你就可以轻松在 Go 中与 MinIO 进行交互了。