Travailler avec S3 et les stockages cloud en Go (Golang) : bibliothèques et exemples

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

Travailler avec S3 et les stockages cloud en Go (Golang)

\n\n

Les stockages d'objets cloud compatibles avec le protocole Amazon S3 sont devenus la norme de facto pour le stockage de données non structurées : images, vidéos, journaux, sauvegardes. Dans l'écosystème Go (Golang), il existe plusieurs bibliothèques puissantes pour interagir avec S3, qui permettent d'intégrer facilement le stockage cloud dans vos applications. Dans cet article, nous examinerons deux bibliothèques principales : minio-go et aws-sdk-go-v2, et fournirons des exemples pratiques de leur utilisation.

\n\n

1. Bibliothèque minio-go

\n\n

MinIO est un stockage d'objets hautes performances open source, entièrement compatible avec l'API Amazon S3. Sa bibliothèque cliente minio-go est l'une des plus populaires pour travailler avec S3 en Go. Elle prend en charge toutes les opérations de base : création et suppression de buckets, téléchargement, téléchargement et suppression d'objets, ainsi que la gestion des politiques d'accès.

\n\n

Installation de la bibliothèque :

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

Exemple : connexion et téléchargement d'un fichier

\n
package main\n\nimport (\n    "context"\n    "log"\n\n    "github.com/minio/minio-go/v7"\n    "github.com/minio/minio-go/v7/pkg/credentials"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    // Spécifiez l'endpoint, la clé d'accès et la clé secrète de votre stockage compatible S3\n    endpoint := "play.min.io"\n    accessKeyID := "Q3AM3UQ867SPQQA43P2F"\n    secretAccessKey := "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG"\n    useSSL := true\n\n    // Initialisons le client\n    minioClient, err := minio.New(endpoint, &minio.Options{\n        Creds:  credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),\n        Secure: useSSL,\n    })\n    if err != nil {\n        log.Fatalln(err)\n    }\n\n    // Créons un bucket (s'il n'existe pas)\n    bucketName := "my-bucket"\n    err = minioClient.MakeBucket(ctx, bucketName, minio.MakeBucketOptions{})\n    if err != nil {\n        // Vérifions si le bucket existe déjà\n        exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)\n        if errBucketExists == nil && exists {\n            log.Printf("Le bucket %s existe déjà", bucketName)\n        } else {\n            log.Fatalln(err)\n        }\n    }\n\n    // Téléchargeons un fichier\n    objectName := "myfile.txt"\n    filePath := "/tmp/myfile.txt"\n    contentType := "text/plain"\n\n    n, err := minioClient.FPutObject(ctx, bucketName, objectName, filePath, minio.PutObjectOptions{\n        ContentType: contentType,\n    })\n    if err != nil {\n        log.Fatalln(err)\n    }\n\n    log.Printf("Fichier %s téléchargé avec succès, taille %d\\n", objectName, n)\n}
\n\n

2. Bibliothèque AWS SDK for Go v2

\n\n

Le SDK officiel d'Amazon (aws-sdk-go-v2) fournit un ensemble complet d'outils pour travailler avec les services AWS, y compris S3. Il prend en charge toutes les fonctionnalités de S3, y compris le téléchargement multithread, le chiffrement et la gestion des versions. Le SDK utilise la génération de code basée sur des modèles, ce qui garantit des performances élevées et un typage strict.

\n\n

Installation :

\n
go get github.com/aws/aws-sdk-go-v2\ngo get github.com/aws/aws-sdk-go-v2/config\ngo get github.com/aws/aws-sdk-go-v2/service/s3
\n\n

Exemple : téléchargement d'un fichier avec AWS SDK v2

\n
package main\n\nimport (\n    "context"\n    "log"\n    "os"\n\n    "github.com/aws/aws-sdk-go-v2/aws"\n    "github.com/aws/aws-sdk-go-v2/config"\n    "github.com/aws/aws-sdk-go-v2/service/s3"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    // Chargeons la configuration à partir des variables d'environnement ou du fichier ~/.aws/credentials\n    cfg, err := config.LoadDefaultConfig(ctx)\n    if err != nil {\n        log.Fatalf("impossible de charger la configuration SDK, %v", err)\n    }\n\n    // Créons un client S3\n    client := s3.NewFromConfig(cfg)\n\n    // Ouvrons le fichier à télécharger\n    file, err := os.Ope                    

Recommendations