Go Quickstart Guide

面向兼容 Amazon S3 的云对象存储的 MinIO Go Client SDK Slack Sourcegraph Apache V2 License

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 下分发,更多信息请参见 LICENSENOTICE

Last modified August 2, 2026: init commit (8338d5b)

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