Arbeit mit S3 und Cloud-Speichern in Go (Golang)
\n\nCloud-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.
1. Die Bibliothek minio-go
\n\nMinIO 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.
Installation der Bibliothek:
\ngo get github.com/minio/minio-go/v7\n\nBeispiel: Verbindung und Datei-Upload
\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 // 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\n2. Die Bibliothek AWS SDK for Go v2
\n\nDas 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.
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\nBeispiel: Datei-Upload mit 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 // 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 Auch in der Bibliothek
Arbeiten mit Excel in Go (Golang): Bibliotheken, Beispiele und Werkzeuge
Rate limiting in Rust: Bibliotheken governor, leaky-bucket und Middleware für Webserver
Caching in C++: Redis, memcached, LevelDB und andere Tools
AutoMapper für C# (.NET): Vollständiger Leitfaden mit Beispielen