Travailler avec S3 et les stockages cloud en Go : la bibliothèque minio-go

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Bibliothèque minio-go pour travailler avec S3 et les stockages cloud en Go



Dans le développement moderne, il est de plus en plus fréquent de devoir intégrer des stockages cloud compatibles avec le protocole Amazon S3 (Simple Storage Service). Que ce soit AWS S3, Yandex.Cloud, DigitalOcean Spaces, MinIO ou tout autre service compatible S3, le langage Go offre une solution élégante et performante : la bibliothèque minio-go.



Minio-go est le client Go officiel pour l'API Amazon S3, développé par la société MinIO. Il fournit un ensemble complet de fonctions pour gérer les buckets et les objets, prend en charge le téléversement/téléchargement en streaming, le chiffrement, le versionnage et de nombreuses autres fonctionnalités de S3. La bibliothèque est entièrement compatible avec AWS S3 et tout autre stockage compatible S3.



Installation



L'installation de la bibliothèque se fait de manière standard via go get :



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


Connexion et configuration du client



Pour commencer, il faut créer un client en spécifiant l'endpoint, la clé d'accès et la clé secrète. Exemple de connexion à MinIO (local ou cloud) :



package main

import ( "context" "log" "github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7/pkg/credentials")

func main() { ctx := context.Background() // Paramètres de connexion endpoint := "play.min.io" // ou votre endpoint accessKeyID := "Q3AM3UQ867SPQQA43P2F" secretAccessKey := "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG" useSSL := true

// Création du client client, err := minio.New(endpoint, &minio.Options{ Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""), Secure: useSSL, }) if err != nil { log.Fatalf("Erreur lors de la création du client : %v", err) }

log.Println("Connexion au stockage S3 établie")}


Gestion des buckets



Un bucket est un répertoire racine dans un stockage S3. Voici les opérations principales :



Création d'un bucket



bucketName := "my-go-bucket"location := "us-east-1"

err = client.MakeBucket(ctx, bucketName, minio.MakeBucketOptions{ Region: location,})if err != nil { log.Printf("Impossible de créer le bucket : %v", err)} else { log.Printf("Bucket '%s' créé avec succès", bucketName)}


Vérification de l'existence d'un bucket



exists, err := client.BucketExists(ctx, bucketName)if err != nil {    log.Fatalf("Erreur lors de la vérification du bucket : %v", err)}if exists {    log.Printf("Le bucket '%s' existe", bucketName)}


Liste de tous les buckets



buckets, err := client.ListBuckets(ctx)if err != nil {    log.Fatalf("Erreur lors de la récupération de la liste des buckets : %v", err)}for _, bucket := range buckets {    log.Printf("Bucket : %s, créé le : %s", bucket.Name, bucket.CreationDate)}


Téléversement de fichiers (upload)



Minio-go prend en charge le téléversement de fichiers depuis le système de fichiers local, depuis un io.Reader et depuis un buffer en mémoire. Exemple de téléversement d'un fichier :



objectName := "example.txt"filePath := "/path/to/local/file.txt"contentType := "text/plain"

// Téléversement du fichiern, err := client.FPutObject(ctx, bucketName, objectName, filePath, minio.PutObjectOptions{ ContentType: contentType,})if err != nil { log.Fatalf("Erreur lors du téléversement du fichier : %v", err)}log.Printf("Fichier '%s' téléversé, taille : %d octets", objectName, n.Size)


Téléversement depuis la mémoire (bytes/reader)



import "strings"

data := strings.NewReader("Bonjour, stockage S3 !")objectName := "hello.txt"

n, err := client.PutObject(ctx, bucketName, objectName, data, int64(data.Len()), minio.PutObjectOptions{ ContentType: "text/plain",})if err != nil { log.Fatalf("Erreur lors du téléversement des données : %v", err)}log.Printf("%d octets téléversés", n.Size)

Recommendations