Travailler avec S3 et les stockages cloud en Go (Golang)
\n\nLes 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.
1. Bibliothèque minio-go
\n\nMinIO 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.
Installation de la bibliothèque :
\ngo get github.com/minio/minio-go/v7\n\nExemple : connexion et téléchargement d'un fichier
\npackage 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\n2. Bibliothèque AWS SDK for Go v2
\n\nLe 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.
Installation :
\ngo 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\nExemple : téléchargement d'un fichier avec AWS SDK v2
\npackage 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 Aussi dans la bibliothèque
Journalisation en Go (Golang) : meilleures bibliothèques et solutions pour la production
Traitement d'images en Node.js : redimensionnement et recadrage avec Sharp et Jimp
ShareLink Swift : guide complet avec exemples
Validation des données en TypeScript : Zod, Yup et autres outils