Go Quickstart Guide
面向兼容 Amazon S3 的云对象存储的 MinIO Go Client SDK

MinIO Go Client SDK 提供简洁直观的 API,用于访问任何兼容 Amazon S3 的对象存储。
本快速入门指南介绍如何安装 MinIO Client SDK、连接 MinIO,并创建一个示例文件上传器。完整 API 列表和示例请参见 godoc 文档 或 Go Client API 参考。
这些示例假定你已具备可用的 Go 开发环境 和 MinIO mc 命令行工具。
从 GitHub 下载
在你的项目目录中执行:
go get github.com/minio/minio-go/v7
初始化 MinIO Client 对象
MinIO Client 连接兼容 Amazon S3 的对象存储时需要以下参数:
| 参数 | 说明 |
|---|---|
endpoint | 对象存储服务 URL。 |
_minio.Options_ | 所有选项,例如凭证、自定义传输等。 |
package main
import (
"log"
"github.com/minio/minio-go/v7"
"github.com/minio/minio-go/v7/pkg/credentials"
)
func main() {
endpoint := "play.min.io"
accessKeyID := "Q3AM3UQ867SPQQA43P2F"
secretAccessKey := "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG"
useSSL := true
// Initialize minio client object.
minioClient, err := minio.New(endpoint, &minio.Options{
Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
Secure: useSSL,
})
if err != nil {
log.Fatalln(err)
}
log.Printf("%#v\n", minioClient) // minioClient is now set up
}
示例:文件上传器
此示例代码会连接到对象存储服务器、创建存储桶,并将文件上传到该存储桶。它使用 MinIO play 服务器,即位于 https://play.min.io 的公共 MinIO 集群。
play 服务器运行 MinIO 最新稳定版本,可用于测试和开发。此示例中展示的访问凭证对公众开放,上传到 play 的所有数据都应视为公开且不受保护。
FileUploader.go
此示例将执行以下操作:
使用提供的凭证连接到 MinIO `play` 服务器。创建一个名为 `testbucket` 的存储桶。从 `/tmp` 上传名为 `testdata` 的文件。使用 `mc ls` 验证文件已创建。 ```go // FileUploader.go MinIO example package main import ( "context" "log" "github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7/pkg/credentials" ) func main() { ctx := context.Background() endpoint := "play.min.io" accessKeyID := "Q3AM3UQ867SPQQA43P2F" secretAccessKey := "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG" useSSL := true // Initialize minio client object. minioClient, err := minio.New(endpoint, &minio.Options{ Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""), Secure: useSSL, }) if err != nil { log.Fatalln(err) } // Make a new bucket called testbucket. bucketName := "testbucket" location := "us-east-1" err = minioClient.MakeBucket(ctx, bucketName, minio.MakeBucketOptions{Region: location}) if err != nil { // Check to see if we already own this bucket (which happens if you run this twice) exists, errBucketExists := minioClient.BucketExists(ctx, bucketName) if errBucketExists == nil && exists { log.Printf("We already own %s\n", bucketName) } else { log.Fatalln(err) } } else { log.Printf("Successfully created %s\n", bucketName) } // Upload the test file // Change the value of filePath if the file is in another location objectName := "testdata" filePath := "/tmp/testdata" contentType := "application/octet-stream" // Upload the test file with FPutObject info, err := minioClient.FPutObject(ctx, bucketName, objectName, filePath, minio.PutObjectOptions{ContentType: contentType}) if err != nil { log.Fatalln(err) } log.Printf("Successfully uploaded %s of size %d\n", objectName, info.Size) } ```
1. 创建一个包含数据的测试文件:
在 Linux 或 macOS 系统上,你可以使用 dd:
dd if=/dev/urandom of=/tmp/testdata bs=2048 count=10
或者在 Windows 上使用 fsutil:
fsutil file createnew "C:\Users\<username>\Desktop\sample.txt" 20480
2. 使用以下命令运行 FileUploader:
go mod init example/FileUploader
go get github.com/minio/minio-go/v7
go get github.com/minio/minio-go/v7/pkg/credentials
go run FileUploader.go
输出如下所示:
2023/11/01 14:27:55 Successfully created testbucket
2023/11/01 14:27:55 Successfully uploaded testdata of size 20480
3. 使用 mc ls 验证已上传的文件:
mc ls play/testbucket
[2023-11-01 14:27:55 UTC] 20KiB STANDARD testdata
API 参考
完整 API 参考可在此处查看。
[完整 API 参考](https://min.io/docs/minio/linux/developers/go/API.html)
API 参考:存储桶操作
[`MakeBucket`](https://min.io/docs/minio/linux/developers/go/API.html#MakeBucket)[`ListBuckets`](https://min.io/docs/minio/linux/developers/go/API.html#ListBuckets)[`BucketExists`](https://min.io/docs/minio/linux/developers/go/API.html#BucketExists)[`RemoveBucket`](https://min.io/docs/minio/linux/developers/go/API.html#RemoveBucket)[`ListObjects`](https://min.io/docs/minio/linux/developers/go/API.html#ListObjects)[`ListIncompleteUploads`](https://min.io/docs/minio/linux/developers/go/API.html#ListIncompleteUploads)
API 参考:存储桶策略操作
[`SetBucketPolicy`](https://min.io/docs/minio/linux/developers/go/API.html#SetBucketPolicy)[`GetBucketPolicy`](https://min.io/docs/minio/linux/developers/go/API.html#GetBucketPolicy)
API 参考:存储桶通知操作
[`SetBucketNotification`](https://min.io/docs/minio/linux/developers/go/API.html#SetBucketNotification)[`GetBucketNotification`](https://min.io/docs/minio/linux/developers/go/API.html#GetBucketNotification)[`RemoveAllBucketNotification`](https://min.io/docs/minio/linux/developers/go/API.html#RemoveAllBucketNotification)[`ListenBucketNotification`](https://min.io/docs/minio/linux/developers/go/API.html#ListenBucketNotification) (MinIO 扩展)[`ListenNotification`](https://min.io/docs/minio/linux/developers/go/API.html#ListenNotification) (MinIO 扩展)
API 参考:文件对象操作
[`FPutObject`](https://min.io/docs/minio/linux/developers/go/API.html#FPutObject)[`FGetObject`](https://min.io/docs/minio/linux/developers/go/API.html#FGetObject)
API 参考:对象操作
[`GetObject`](https://min.io/docs/minio/linux/developers/go/API.html#GetObject)[`PutObject`](https://min.io/docs/minio/linux/developers/go/API.html#PutObject)[`PutObjectStreaming`](https://min.io/docs/minio/linux/developers/go/API.html#PutObjectStreaming)[`StatObject`](https://min.io/docs/minio/linux/developers/go/API.html#StatObject)[`CopyObject`](https://min.io/docs/minio/linux/developers/go/API.html#CopyObject)[`RemoveObject`](https://min.io/docs/minio/linux/developers/go/API.html#RemoveObject)[`RemoveObjects`](https://min.io/docs/minio/linux/developers/go/API.html#RemoveObjects)[`RemoveIncompleteUpload`](https://min.io/docs/minio/linux/developers/go/API.html#RemoveIncompleteUpload)[`SelectObjectContent`](https://min.io/docs/minio/linux/developers/go/API.html#SelectObjectContent)
API 参考:预签名操作
[`PresignedGetObject`](https://min.io/docs/minio/linux/developers/go/API.html#PresignedGetObject)[`PresignedPutObject`](https://min.io/docs/minio/linux/developers/go/API.html#PresignedPutObject)[`PresignedHeadObject`](https://min.io/docs/minio/linux/developers/go/API.html#PresignedHeadObject)[`PresignedPostPolicy`](https://min.io/docs/minio/linux/developers/go/API.html#PresignedPostPolicy)
API 参考:客户端自定义设置
[`SetAppInfo`](https://min.io/docs/minio/linux/developers/go/API.html#SetAppInfo)[`TraceOn`](https://min.io/docs/minio/linux/developers/go/API.html#TraceOn)[`TraceOff`](https://min.io/docs/minio/linux/developers/go/API.html#TraceOff)
完整示例
完整示例:存储桶操作
[makebucket.go](https://github.com/minio/minio-go/blob/master/examples/s3/makebucket.go)[listbuckets.go](https://github.com/minio/minio-go/blob/master/examples/s3/listbuckets.go)[bucketexists.go](https://github.com/minio/minio-go/blob/master/examples/s3/bucketexists.go)[removebucket.go](https://github.com/minio/minio-go/blob/master/examples/s3/removebucket.go)[listobjects.go](https://github.com/minio/minio-go/blob/master/examples/s3/listobjects.go)[listobjectsV2.go](https://github.com/minio/minio-go/blob/master/examples/s3/listobjectsV2.go)[listincompleteuploads.go](https://github.com/minio/minio-go/blob/master/examples/s3/listincompleteuploads.go)
完整示例:存储桶策略操作
[setbucketpolicy.go](https://github.com/minio/minio-go/blob/master/examples/s3/setbucketpolicy.go)[getbucketpolicy.go](https://github.com/minio/minio-go/blob/master/examples/s3/getbucketpolicy.go)[listbucketpolicies.go](https://github.com/minio/minio-go/blob/master/examples/s3/listbucketpolicies.go)
完整示例:存储桶生命周期管理操作
[setbucketlifecycle.go](https://github.com/minio/minio-go/blob/master/examples/s3/setbucketlifecycle.go)[getbucketlifecycle.go](https://github.com/minio/minio-go/blob/master/examples/s3/getbucketlifecycle.go)
完整示例:存储桶加密操作
[setbucketencryption.go](https://github.com/minio/minio-go/blob/master/examples/s3/setbucketencryption.go)[getbucketencryption.go](https://github.com/minio/minio-go/blob/master/examples/s3/getbucketencryption.go)[removebucketencryption.go](https://github.com/minio/minio-go/blob/master/examples/s3/removebucketencryption.go)
完整示例:存储桶复制操作
[setbucketreplication.go](https://github.com/minio/minio-go/blob/master/examples/s3/setbucketreplication.go)[getbucketreplication.go](https://github.com/minio/minio-go/blob/master/examples/s3/getbucketreplication.go)[removebucketreplication.go](https://github.com/minio/minio-go/blob/master/examples/s3/removebucketreplication.go)
完整示例:存储桶通知操作
[setbucketnotification.go](https://github.com/minio/minio-go/blob/master/examples/s3/setbucketnotification.go)[getbucketnotification.go](https://github.com/minio/minio-go/blob/master/examples/s3/getbucketnotification.go)[removeallbucketnotification.go](https://github.com/minio/minio-go/blob/master/examples/s3/removeallbucketnotification.go)[listenbucketnotification.go](https://github.com/minio/minio-go/blob/master/examples/minio/listenbucketnotification.go) (MinIO 扩展)[listennotification.go](https://github.com/minio/minio-go/blob/master/examples/minio/listen-notification.go) (MinIO 扩展)
完整示例:文件对象操作
[fputobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/fputobject.go)[fgetobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/fgetobject.go)
完整示例:对象操作
[putobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/putobject.go)[getobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/getobject.go)[statobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/statobject.go)[copyobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/copyobject.go)[removeobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/removeobject.go)[removeincompleteupload.go](https://github.com/minio/minio-go/blob/master/examples/s3/removeincompleteupload.go)[removeobjects.go](https://github.com/minio/minio-go/blob/master/examples/s3/removeobjects.go)
完整示例:加密对象操作
[put-encrypted-object.go](https://github.com/minio/minio-go/blob/master/examples/s3/put-encrypted-object.go)[get-encrypted-object.go](https://github.com/minio/minio-go/blob/master/examples/s3/get-encrypted-object.go)[fput-encrypted-object.go](https://github.com/minio/minio-go/blob/master/examples/s3/fputencrypted-object.go)
完整示例:预签名操作
[presignedgetobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/presignedgetobject.go)[presignedputobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/presignedputobject.go)[presignedheadobject.go](https://github.com/minio/minio-go/blob/master/examples/s3/presignedheadobject.go)[presignedpostpolicy.go](https://github.com/minio/minio-go/blob/master/examples/s3/presignedpostpolicy.go)
进一步探索
[Godoc 文档](https://pkg.go.dev/github.com/minio/minio-go/v7)[完整文档](https://min.io/docs/minio/kubernetes/upstream/index.html)[MinIO Go Client SDK API 参考](https://min.io/docs/minio/linux/developers/go/API.html)
贡献
许可证
此 SDK 在 Apache License, Version 2.0 下分发,更多信息请参见 LICENSE 和 NOTICE。
Portions of this page are adapted from the MinIO Object Storage Documentation, © 2020–Present MinIO, Inc., licensed under CC BY 4.0, converted and maintained by the Silo project. Attribution