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 := false
client, 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[]