MinIO GO-SDK
隨著云原生架構的發展,對象存儲已成為現代數據存儲的主流方式。MinIO 作為一款高性能、兼容 S3 協議的對象存儲服務,因其部署靈活、開源透明等特性,在私有云和本地部署場景中得到了廣泛應用。
本文將詳細介紹如何使用 MinIO 的 Go 語言客戶端(minio-go),實現對象的上傳、下載、瀏覽與刪除操作。內容覆蓋實際開發常用操作,適合希望通過 Go 操作對象存儲的工程師。
? 一、準備工作
1. 環境依賴
- Go 版本:建議 Go 1.16+
- MinIO 已部署并運行(本地或遠程皆可)
- 獲取 AccessKey 和 SecretKey
2. 安裝 SDK
go get github.com/minio/minio-go/v7
go get github.com/minio/minio-go/v7/pkg/credentials
?? 二、初始化 MinIO 客戶端
import (
"bytes"
"context"
"fmt"
"github.com/minio/minio-go/v7"
"github.com/minio/minio-go/v7/pkg/credentials"
"io"
"log"
"log/slog"
"time"
)func main() {client := initMinioClient()
}// initMinioClient 初始化minio客戶端
func initMinioClient() *minio.Client {endpoint := "127.0.0.1:9000"accessKeyID := "minioadmin"secretAccessKey := "minioadmin"useSSL := falseclient, err := minio.New(endpoint, &minio.Options{Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),Secure: useSSL,})if err != nil {log.Fatalln("初始minio客戶端失敗", err)}return client
}
?? 三、創建 Bucket(存儲桶)
// createBucket 如果bucket不存在則創建
func createBucket(client *minio.Client, bucketName string) {exists, errBucketExists := client.BucketExists(context.Background(), bucketName)if errBucketExists != nil {slog.Info("檢查bucket是否存在失敗", errBucketExists)return}if !exists {err := client.MakeBucket(context.Background(), bucketName, minio.MakeBucketOptions{})if err != nil {slog.Info("創建桶失敗!", err)} else {slog.Info("創建桶成功!")}}
}
?? 四、上傳對象
// PutObject 上傳文件到minio,這里直接使用byte[]