Arbeit mit S3 und Cloud-Speichern in Go: Die Bibliothek minio-go

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

Die Bibliothek minio-go für die Arbeit mit S3 und Cloud-Speichern in Go



In der modernen Entwicklung entsteht immer häufiger die Notwendigkeit der Integration mit Cloud-Speichern, die mit dem Amazon S3-Protokoll (Simple Storage Service) kompatibel sind. Ob AWS S3, Yandex.Cloud, DigitalOcean Spaces, MinIO oder ein anderer S3-kompatibler Dienst, die Sprache Go bietet eine elegante und leistungsstarke Lösung – die Bibliothek minio-go.



Minio-go ist der offizielle Go-Client für die Amazon S3 API, entwickelt von der Firma MinIO. Er bietet einen vollständigen Satz von Funktionen zur Verwaltung von Buckets und Objekten, unterstützt Streaming-Upload/Download, Verschlüsselung, Versionierung und viele andere S3-Funktionen. Die Bibliothek ist vollständig kompatibel mit AWS S3 und allen anderen S3-kompatiblen Speichern.



Installation



Die Installation der Bibliothek erfolgt auf dem Standardweg über go get:



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


Verbindung und Konfiguration des Clients



Um zu beginnen, muss ein Client erstellt werden, der Endpoint, Access Key und Secret Key angibt. Beispiel für die Verbindung zu MinIO (lokal oder in der 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() // Verbindungsparameter endpoint := "play.min.io" // oder Ihr Endpoint accessKeyID := "Q3AM3UQ867SPQQA43P2F" secretAccessKey := "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG" useSSL := true

// Client erstellen client, err := minio.New(endpoint, &minio.Options{ Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""), Secure: useSSL, }) if err != nil { log.Fatalf("Fehler beim Erstellen des Clients: %v", err) }

log.Println("Verbindung zum S3-Speicher hergestellt")}


Arbeit mit Buckets



Ein Bucket ist das Stammverzeichnis in einem S3-Speicher. Betrachten wir die grundlegenden Operationen:



Bucket erstellen



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

err = client.MakeBucket(ctx, bucketName, minio.MakeBucketOptions{ Region: location,})if err != nil { log.Printf("Bucket konnte nicht erstellt werden: %v", err)} else { log.Printf("Bucket '%s' erfolgreich erstellt", bucketName)}


Vorhandensein eines Buckets prüfen



exists, err := client.BucketExists(ctx, bucketName)if err != nil {    log.Fatalf("Fehler bei der Bucket-Prüfung: %v", err)}if exists {    log.Printf("Bucket '%s' existiert", bucketName)}


Liste aller Buckets



buckets, err := client.ListBuckets(ctx)if err != nil {    log.Fatalf("Fehler beim Abrufen der Bucket-Liste: %v", err)}for _, bucket := range buckets {    log.Printf("Bucket: %s, erstellt: %s", bucket.Name, bucket.CreationDate)}


Dateien hochladen (Upload)



Minio-go unterstützt das Hochladen von Dateien aus dem lokalen Dateisystem, aus io.Reader und aus einem Puffer im Speicher. Beispiel für das Hochladen einer Datei:



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

// Datei hochladenn, err := client.FPutObject(ctx, bucketName, objectName, filePath, minio.PutObjectOptions{ ContentType: contentType,})if err != nil { log.Fatalf("Fehler beim Hochladen der Datei: %v", err)}log.Printf("Datei '%s' hochgeladen, Größe: %d Bytes", objectName, n.Size)


Hochladen aus dem Speicher (Bytes/Reader)



import "strings"

data := strings.NewReader("Hallo, S3 Speicher!")objectName := "hello.txt"

n, err := client.PutObject(ctx, bucketName, objectName, data, int64(data.Len()), minio.PutObjectOptions{ ContentType: "text/plain",})if err != nil { log.Fatalf("Fehler beim Hochladen der Daten: %v", err)}log.Printf("%d Bytes hochgeladen", n.Size)

Empfehlungen