Trabalhando com S3 e armazenamentos em nuvem em Go (Golang): bibliotecas e exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalhando com S3 e armazenamentos em nuvem em Go (Golang)



Os armazenamentos de objetos em nuvem compatíveis com o protocolo Amazon S3 tornaram-se o padrão de facto para armazenar dados não estruturados: imagens, vídeos, logs, backups. No ecossistema Go (Golang), existem várias bibliotecas poderosas para interagir com S3, que permitem integrar facilmente o armazenamento em nuvem em suas aplicações. Neste artigo, vamos analisar duas bibliotecas principais: minio-go e aws-sdk-go-v2, além de fornecer exemplos práticos de seu uso.



1. Biblioteca minio-go



MinIO é um armazenamento de objetos de alto desempenho e código aberto, totalmente compatível com a API Amazon S3. Sua biblioteca cliente minio-go é uma das mais populares para trabalhar com S3 em Go. Ela suporta todas as operações básicas: criação e exclusão de buckets, upload, download e exclusão de objetos, além de trabalhar com políticas de acesso.



Instalação da biblioteca:

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


Exemplo: conexão e upload de arquivo

package main

import ( "context" "log"

"github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7/pkg/credentials")

func main() { ctx := context.Background()

// Especifique o endpoint, access key e secret key do seu armazenamento compatível com S3 endpoint := "play.min.io" accessKeyID := "Q3AM3UQ867SPQQA43P2F" secretAccessKey := "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG" useSSL := true

// Inicializa o cliente minioClient, err := minio.New(endpoint, &minio.Options{ Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""), Secure: useSSL, }) if err != nil { log.Fatalln(err) }

// Cria um bucket (se não existir) bucketName := "my-bucket" err = minioClient.MakeBucket(ctx, bucketName, minio.MakeBucketOptions{}) if err != nil { // Verifica se o bucket já existe exists, errBucketExists := minioClient.BucketExists(ctx, bucketName) if errBucketExists == nil && exists { log.Printf("Bucket %s already exists", bucketName) } else { log.Fatalln(err) } }

// Faz upload do arquivo objectName := "myfile.txt" filePath := "/tmp/myfile.txt" contentType := "text/plain"

n, 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", objectName, n)}


2. Biblioteca AWS SDK for Go v2



O SDK oficial da Amazon (aws-sdk-go-v2) fornece um conjunto completo de ferramentas para trabalhar com os serviços AWS, incluindo S3. Ele suporta todos os recursos do S3, incluindo upload multithread, criptografia e gerenciamento de versões. O SDK usa geração de código baseada em modelos, o que garante alto desempenho e tipagem forte.



Instalação:

go get github.com/aws/aws-sdk-go-v2go get github.com/aws/aws-sdk-go-v2/configgo get github.com/aws/aws-sdk-go-v2/service/s3


Exemplo: upload de arquivo usando AWS SDK v2

package main

import ( "context" "log" "os"

"github.com/aws/aws-sdk-go-v2/aws" "github.com/aws/aws-sdk-go-v2/config" "github.com/aws/aws-sdk-go-v2/service/s3")

func main() { ctx := context.Background()

// Carrega a configuração das variáveis de ambiente ou do arquivo ~/.aws/credentials cfg, err := config.LoadDefaultConfig(ctx) if err != nil { log.Fatalf("unable to load SDK config, %v", err) }

// Cria um cliente S3 client := s3.NewFromConfig(cfg)

// Abre o arquivo para upload file, err := os.Ope

Recommendations