文档

Go 快速入门指南

适用于 Amazon S3 兼容云存储的 MinIO Go 客户端 SDK Slack Sourcegraph Apache V2 许可证

MinIO Go 客户端 SDK 提供了简单易用的 API,可访问任何与 Amazon S3 兼容的对象存储。

本快速入门指南介绍了如何安装 MinIO 客户端 SDK、连接到 MinIO 以及创建示例文件上传器。有关 API 和示例的完整列表,请参阅 godoc 文档Go 客户端 API 参考.

这些示例假设您拥有一个可用的 Go 开发环境MinIO mc 命令行工具.

从 Github 下载

在您的项目目录中

go get github.com/minio/minio-go/v7

初始化 MinIO 客户端对象

MinIO 客户端需要以下参数才能连接到与 Amazon S3 兼容的对象存储

参数

描述

端点

对象存储服务的 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 验证文件是否已创建。

// 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 TestDataFile

API 参考

完整的 API 参考可在此处获得。

API 参考:存储桶操作

API 参考:存储桶策略操作

API 参考:存储桶通知操作

API 参考:文件对象操作

API 参考:对象操作

API 参考:预签署操作

API 参考:客户端自定义设置

完整示例

完整示例:存储桶操作

完整示例:存储桶策略操作

完整示例:存储桶生命周期操作

完整示例:存储桶加密操作

完整示例:存储桶复制操作

完整示例:存储桶通知操作

完整示例:文件对象操作

完整示例:对象操作

完整示例:加密对象操作

完整示例:预签署操作

进一步探索

贡献

贡献者指南

许可证

此 SDK 在 Apache 许可证 2.0 版 下发布,有关更多信息,请参阅 LICENSENOTICE