|
| 1 | +--- |
| 2 | +title: "RustFS Golang SDK Benutzerhandbuch" |
| 3 | +description: "Verwenden Sie das Golang SDK, um RustFS-Instanzen zu verwalten, einschließlich der Erstellung und Löschung von Buckets und Objekten." |
| 4 | +--- |
| 5 | + |
| 6 | +# Golang SDK |
| 7 | + |
| 8 | +Da RustFS ein vollständig S3-kompatibles Objektspeichersystem ist, können Sie durch das Wrapping des S3 TypeScript SDK ein für RustFS geeignetes Golang SDK erstellen. Über das SDK können Sie RustFS verwalten, einschließlich der Erstellung und Löschung von Buckets/Objekten, dem Hoch- und Herunterladen von Dateien usw. |
| 9 | + |
| 10 | +## Voraussetzungen |
| 11 | + |
| 12 | +- Eine funktionierende RustFS-Instanz (siehe [Installationsanleitung](../../installation/index.md) für die Installation). |
| 13 | +- Zugriffsschlüssel (siehe [Zugriffsschlüssel-Verwaltung](../../administration/iam/access-token.md) für die Erstellung). |
| 14 | + |
| 15 | +## RustFS Golang SDK Konstruktion |
| 16 | + |
| 17 | +Verwenden Sie `RUSTFS_ACCESS_KEY_ID`, `RUSTFS_SECRET_ACCESS_KEY`, `RUSTFS_ENDPOINT_URL`, `RUSTFS_REGION`, um eine `aws.Config` zu erstellen, und verwenden Sie dann `s3.NewFromConfig` aus dem Golang S3 SDK, um einen RustFS Client zu erstellen: |
| 18 | + |
| 19 | +``` |
| 20 | +region := os.Getenv("RUSTFS_REGION") |
| 21 | +access_key_id := os.Getenv("RUSTFS_ACCESS_KEY_ID") |
| 22 | +secret_access_key := os.Getenv("RUSTFS_SECRET_ACCESS_KEY") |
| 23 | +endpoint := os.Getenv("RUSTFS_ENDPOINT_URL") |
| 24 | +// usePathStyle := strings.ToLower(os.Getenv("AWS_S3_USE_PATH_STYLE")) == "true" |
| 25 | +
|
| 26 | +if access_key_id == "" || secret_access_key == "" || region == "" || endpoint == "" { |
| 27 | + log.Fatal("missing the env: RUSTFS_ACCESS_KEY_ID / RUSTFS_SECRET_ACCESS_KEY / RUSTFS_REGION / RUSTFS_ENDPOINT_URL") |
| 28 | +} |
| 29 | +
|
| 30 | +// build aws.Config |
| 31 | +cfg := aws.Config{ |
| 32 | + Region: region, |
| 33 | + EndpointResolver: aws.EndpointResolverFunc(func(service, region string) (aws.Endpoint, error) { |
| 34 | + return aws.Endpoint{ |
| 35 | + URL: endpoint, |
| 36 | + }, nil |
| 37 | + }), |
| 38 | + Credentials: aws.NewCredentialsCache(credentials.NewStaticCredentialsProvider(access_key_id, secret_access_key, "")), |
| 39 | +} |
| 40 | +
|
| 41 | +// build S3 client |
| 42 | +client := s3.NewFromConfig(cfg, func(o *s3.Options) { |
| 43 | + o.UsePathStyle = true |
| 44 | +}) |
| 45 | +``` |
| 46 | + |
| 47 | +Dann können Sie den erstellten RustFS Client für Bucket- und Objektoperationen verwenden. |
| 48 | + |
| 49 | +## Bucket erstellen |
| 50 | + |
| 51 | +``` |
| 52 | +_, err = client.CreateBucket(ctx, &s3.CreateBucketInput{ |
| 53 | + Bucket: aws.String("go-sdk-rustfs"), |
| 54 | +}) |
| 55 | +if err != nil { |
| 56 | + log.Fatalf("create bucket failed: %v", err) |
| 57 | +} |
| 58 | +``` |
| 59 | + |
| 60 | +## Buckets auflisten |
| 61 | + |
| 62 | +``` |
| 63 | +resp, err := client.ListBuckets(ctx, &s3.ListBucketsInput{}) |
| 64 | +if err != nil { |
| 65 | + log.Fatalf("list buckets failed: %v", err) |
| 66 | +} |
| 67 | +
|
| 68 | +fmt.Println("Buckets:") |
| 69 | +for _, b := range resp.Buckets { |
| 70 | + fmt.Println(" -", *b.Name) |
| 71 | +} |
| 72 | +``` |
| 73 | + |
| 74 | +## Bucket löschen |
| 75 | + |
| 76 | +``` |
| 77 | +_, err = client.DeleteBucket(ctx, &s3.DeleteBucketInput{ |
| 78 | + Bucket: aws.String("go-sdk-rustfs"), |
| 79 | +}) |
| 80 | +if err != nil { |
| 81 | + log.Fatalf("delete bucket failed: %v", err) |
| 82 | +} |
| 83 | +``` |
| 84 | + |
| 85 | +## Objekte auflisten |
| 86 | + |
| 87 | +``` |
| 88 | +resp, err := client.ListObjectsV2(ctx, &s3.ListObjectsV2Input{ |
| 89 | + Bucket: aws.String("bucket-target"), |
| 90 | +}) |
| 91 | +if err != nil { |
| 92 | + log.Fatalf("list object failed: %v", err) |
| 93 | +} |
| 94 | +for _, obj := range resp.Contents { |
| 95 | + fmt.Println(" -", *obj.Key) |
| 96 | +} |
| 97 | +``` |
| 98 | + |
| 99 | +## Objekt hochladen |
| 100 | + |
| 101 | +``` |
| 102 | +_, err = client.PutObject(ctx, &s3.PutObjectInput{ |
| 103 | + Bucket: aws.String("bucket-target"), |
| 104 | + Key: aws.String("test.txt"), |
| 105 | + Body: strings.NewReader("hello rustfs"), |
| 106 | +}) |
| 107 | +if err != nil { |
| 108 | + log.Fatalf("upload object failed: %v", err) |
| 109 | +} |
| 110 | +``` |
| 111 | + |
| 112 | +## Objekt herunterladen |
| 113 | + |
| 114 | +``` |
| 115 | +resp, err := client.GetObject(ctx, &s3.GetObjectInput{ |
| 116 | + Bucket: aws.String("bucket-target"), |
| 117 | + Key: aws.String("1.txt"), |
| 118 | +}) |
| 119 | +if err != nil { |
| 120 | + log.Fatalf("download object fail: %v", err) |
| 121 | +} |
| 122 | +defer resp.Body.Close() |
| 123 | +
|
| 124 | +// read object content |
| 125 | +data, err := io.ReadAll(resp.Body) |
| 126 | +if err != nil { |
| 127 | + log.Fatalf("read object content fail: %v", err) |
| 128 | +} |
| 129 | +fmt.Println("content is :", string(data)) |
| 130 | +``` |
| 131 | + |
| 132 | +Für andere Verwendungen können Sie selbst erkunden. Mit Vibe Coding wird es noch einfacher! |
0 commit comments