Arbeit mit S3 und Cloud-Speichern in Go (Golang): Bibliotheken und Beispiele

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeit mit S3 und Cloud-Speichern in Go (Golang)

\n\n

Cloud-basierte Objektspeicher, die mit dem Amazon S3-Protokoll kompatibel sind, sind zum De-facto-Standard für die Speicherung unstrukturierter Daten geworden: Bilder, Videos, Logs, Backups. Im Go (Golang)-Ökosystem gibt es mehrere leistungsstarke Bibliotheken für die Interaktion mit S3, die eine einfache Integration von Cloud-Speicher in Ihre Anwendungen ermöglichen. In diesem Artikel betrachten wir zwei Hauptbibliotheken: minio-go und aws-sdk-go-v2, und geben praktische Beispiele für deren Verwendung.

\n\n

1. Die Bibliothek minio-go

\n\n

MinIO ist ein leistungsstarker Open-Source-Objektspeicher, der vollständig mit der Amazon S3 API kompatibel ist. Seine Client-Bibliothek minio-go ist eine der beliebtesten für die Arbeit mit S3 in Go. Sie unterstützt alle grundlegenden Operationen: Erstellen und Löschen von Buckets, Hochladen, Herunterladen und Löschen von Objekten sowie die Arbeit mit Zugriffsrichtlinien.

\n\n

Installation der Bibliothek:

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

Beispiel: Verbindung und Datei-Upload

\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    // Geben Sie den Endpoint, Access Key und Secret Key Ihres S3-kompatiblen Speichers an\n    endpoint := "play.min.io"\n    accessKeyID := "Q3AM3UQ867SPQQA43P2F"\n    secretAccessKey := "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG"\n    useSSL := true\n\n    // Client initialisieren\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    // Bucket erstellen (falls nicht vorhanden)\n    bucketName := "my-bucket"\n    err = minioClient.MakeBucket(ctx, bucketName, minio.MakeBucketOptions{})\n    if err != nil {\n        // Prüfen, ob der Bucket bereits existiert\n        exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)\n        if errBucketExists == nil && exists {\n            log.Printf("Bucket %s already exists", bucketName)\n        } else {\n            log.Fatalln(err)\n        }\n    }\n\n    // Datei hochladen\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("Successfully uploaded %s of size %d\\n", objectName, n)\n}
\n\n

2. Die Bibliothek AWS SDK for Go v2

\n\n

Das offizielle SDK von Amazon (aws-sdk-go-v2) bietet einen vollständigen Satz von Werkzeugen für die Arbeit mit AWS-Diensten, einschließlich S3. Es unterstützt alle S3-Funktionen, einschließlich Multithread-Upload, Verschlüsselung und Versionsverwaltung. Das SDK verwendet Codegenerierung auf Basis von Modellen, was hohe Leistung und strenge Typisierung gewährleistet.

\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

Beispiel: Datei-Upload mit 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    // Konfiguration aus Umgebungsvariablen oder der Datei ~/.aws/credentials laden\n    cfg, err := config.LoadDefaultConfig(ctx)\n    if err != nil {\n        log.Fatalf("unable to load SDK config, %v", err)\n    }\n\n    // S3-Client erstellen\n    client := s3.NewFromConfig(cfg)\n\n    // Datei zum Hochladen öffnen\n    file, err := os.Ope                    

Empfehlungen