العمل مع S3 والتخزين السحابي في Go (Golang): المكتبات والأمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع S3 والتخزين السحابي في Go (Golang)

\n\n

أصبحت مخازن الكائنات السحابية المتوافقة مع بروتوكول Amazon S3 المعيار الفعلي لتخزين البيانات غير المنظمة: الصور، الفيديوهات، السجلات، النسخ الاحتياطية. في نظام Go (Golang) البيئي، توجد عدة مكتبات قوية للتفاعل مع S3، والتي تتيح دمج التخزين السحابي بسهولة في تطبيقاتك. في هذه المقالة، سنستعرض مكتبتين رئيسيتين: minio-go و aws-sdk-go-v2، وسنقدم أمثلة عملية لاستخدامهما.

\n\n

1. مكتبة minio-go

\n\n

MinIO هو مخزن كائنات عالي الأداء مفتوح المصدر، متوافق تمامًا مع Amazon S3 API. مكتبة العميل الخاصة به minio-go هي واحدة من أشهر المكتبات للعمل مع S3 في Go. وهي تدعم جميع العمليات الأساسية: إنشاء وحذف الحاويات (Buckets)، رفع وتنزيل وحذف الكائنات، بالإضافة إلى العمل مع سياسات الوصول.

\n\n

تثبيت المكتبة:

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

مثال: الاتصال ورفع ملف

\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    // حدد نقطة النهاية (endpoint) ومفتاح الوصول (access key) والمفتاح السري (secret key) لمخزنك المتوافق مع S3\n    endpoint := "play.min.io"\n    accessKeyID := "Q3AM3UQ867SPQQA43P2F"\n    secretAccessKey := "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG"\n    useSSL := true\n\n    // تهيئة العميل\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    // إنشاء حاوية (إذا لم تكن موجودة)\n    bucketName := "my-bucket"\n    err = minioClient.MakeBucket(ctx, bucketName, minio.MakeBucketOptions{})\n    if err != nil {\n        // التحقق مما إذا كانت الحاوية موجودة بالفعل\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    // رفع ملف\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. مكتبة AWS SDK for Go v2

\n\n

SDK الرسمي من Amazon (aws-sdk-go-v2) يوفر مجموعة كاملة من الأدوات للعمل مع خدمات AWS، بما في ذلك S3. وهو يدعم جميع إمكانيات S3، بما في ذلك الرفع متعدد الخيوط، التشفير، وإدارة الإصدارات. يستخدم SDK توليد الكود بناءً على النماذج، مما يضمن أداءً عاليًا وكتابة صارمة للأنواع.

\n\n

التثبيت:

\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

مثال: رفع ملف باستخدام 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    // تحميل الإعدادات من متغيرات البيئة أو ملف ~/.aws/credentials\n    cfg, err := config.LoadDefaultConfig(ctx)\n    if err != nil {\n        log.Fatalf("unable to load SDK config, %v", err)\n    }\n\n    // إنشاء عميل S3\n    client := s3.NewFromConfig(cfg)\n\n    // فتح ملف للرفع\n    file, err := os.Ope                    

توصيات