Go (Golang) में S3 और क्लाउड स्टोरेज के साथ काम करना
Amazon S3 प्रोटोकॉल के अनुकूल क्लाउड ऑब्जेक्ट स्टोरेज, अनस्ट्रक्चर्ड डेटा (जैसे इमेज, वीडियो, लॉग, बैकअप) को स्टोर करने का मानक बन गए हैं। Go (Golang) इकोसिस्टम में S3 के साथ इंटरैक्ट करने के लिए कई शक्तिशाली लाइब्रेरी हैं, जो आपके एप्लिकेशन में क्लाउड स्टोरेज को आसानी से इंटीग्रेट करने में मदद करती हैं। इस लेख में, हम दो मुख्य लाइब्रेरी minio-go और aws-sdk-go-v2 पर चर्चा करेंगे, और उनके व्यावहारिक उदाहरण देंगे।
1. minio-go लाइब्रेरी
MinIO एक हाई-परफॉरमेंस, ओपन-सोर्स ऑब्जेक्ट स्टोरेज है जो Amazon S3 API के साथ पूरी तरह से संगत है। इसकी क्लाइंट लाइब्रेरी minio-go Go में S3 के साथ काम करने के लिए सबसे लोकप्रिय है। यह सभी बुनियादी ऑपरेशनों को सपोर्ट करती है: बकेट बनाना और हटाना, ऑब्जेक्ट अपलोड, डाउनलोड और डिलीट करना, साथ ही एक्सेस पॉलिसी के साथ काम करना।
लाइब्रेरी इंस्टॉल करना:
go get github.com/minio/minio-go/v7
उदाहरण: कनेक्ट करना और फ़ाइल अपलोड करना
package main
import (
"context"
"log"
"github.com/minio/minio-go/v7"
"github.com/minio/minio-go/v7/pkg/credentials"
)
func main() {
ctx := context.Background()
// अपने S3-संगत स्टोरेज का endpoint, access key और secret key दें
endpoint := "play.min.io"
accessKeyID := "Q3AM3UQ867SPQQA43P2F"
secretAccessKey := "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG"
useSSL := true
// क्लाइंट इनिशियलाइज़ करें
minioClient, err := minio.New(endpoint, &minio.Options{
Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
Secure: useSSL,
})
if err != nil {
log.Fatalln(err)
}
// बकेट बनाएँ (यदि मौजूद नहीं है)
bucketName := "my-bucket"
err = minioClient.MakeBucket(ctx, bucketName, minio.MakeBucketOptions{})
if err != nil {
// जाँचें कि बकेट पहले से मौजूद है
exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
if errBucketExists == nil && exists {
log.Printf("Bucket %s पहले से मौजूद है", bucketName)
} else {
log.Fatalln(err)
}
}
// फ़ाइल अपलोड करें
objectName := "myfile.txt"
filePath := "/tmp/myfile.txt"
contentType := "text/plain"
n, err := minioClient.FPutObject(ctx, bucketName, objectName, filePath, minio.PutObjectOptions{
ContentType: contentType,
})
if err != nil {
log.Fatalln(err)
}
log.Printf("%s सफलतापूर्वक अपलोड हुआ, आकार %d\n", objectName, n)
}
2. AWS SDK for Go v2 लाइब्रेरी
Amazon का आधिकारिक SDK (aws-sdk-go-v2) AWS सेवाओं (S3 सहित) के साथ काम करने के लिए पूर्ण टूलसेट प्रदान करता है। यह S3 की सभी क्षमताओं को सपोर्ट करता है, जिसमें मल्टी-थ्रेडेड अपलोड, एन्क्रिप्शन और वर्जनिंग शामिल है। SDK मॉडल-आधारित कोड जनरेशन का उपयोग करता है, जो उच्च प्रदर्शन और सख्त टाइपिंग सुनिश्चित करता है।
इंस्टॉलेशन:
go get github.com/aws/aws-sdk-go-v2
go get github.com/aws/aws-sdk-go-v2/config
go get github.com/aws/aws-sdk-go-v2/service/s3
उदाहरण: AWS SDK v2 का उपयोग करके फ़ाइल अपलोड करना
package main
import (
"context"
"log"
"os"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/service/s3"
)
func main() {
ctx := context.Background()
// एनवायरनमेंट वेरिएबल या ~/.aws/credentials फ़ाइल से कॉन्फ़िगरेशन लोड करें
cfg, err := config.LoadDefaultConfig(ctx)
if err != nil {
log.Fatalf("SDK कॉन्फ़िगरेशन लोड करने में असमर्थ, %v", err)
}
// S3 क्लाइंट बनाएँ
client := s3.NewFromConfig(cfg)
// अपलोड के लिए फ़ाइल खोलें
file, err := os.Open("/tmp/myfile.txt")
if err != nil {
log.Fatalf("फ़ाइल खोलने में विफल, %v", err)
}
de