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/v7Verbindung 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) Auch in der Bibliothek
HTML-Parsing in C++: Bibliotheken und Beispiele für die Arbeit mit DOM und XPath
gRPC für TypeScript: Bibliotheken und Anwendungsbeispiele
Standardbibliothek von JavaScript (Node.js): vollständiger Überblick
ts-jest für TypeScript: Vollständige Anleitung mit Beispielen