Skip to content

Commit 09b6927

Browse files
authored
Merge pull request #49 from majinghe/feat/go-sdk
feat: add golang sdk support
2 parents fffb9b3 + cf5d547 commit 09b6927

File tree

4 files changed

+139
-1
lines changed

4 files changed

+139
-1
lines changed

docs/zh/developer/sdk/go.md

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
---
2+
title: "RustFS Golang SDK 使用指南"
3+
description: "通过 Golang SDK 来对 RustFS 实例进行操作,包括存储桶、对象的创建和删除."
4+
---
5+
6+
# Golang SDK
7+
8+
由于 RustFS 是完全兼容 S3 的对象存储系统,因此可以通过对 S3 的 TypeScript SDK 做一些封装来构建适用于 RustFS 的 Golang SDK,通过 SDK 对 RustFS 进行操作,包括存储桶/对象的创建和删除、文件的上传和下载等。
9+
10+
## 前提条件
11+
12+
- 一个可用的 RustFS 实例(可参考[安装指南](../../installation/index.md)进行安装)。
13+
- 访问密钥(可参考[访问密钥管理](../../administration/iam/access-token.md)进行创建)。
14+
15+
## RustFS Golang SDK 构造
16+
17+
利用 `RUSTFS_ACCESS_KEY_ID``RUSTFS_SECRET_ACCESS_KEY``RUSTFS_ENDPOINT_URL``RUSTFS_REGION` 构造一个 `aws.Config`,然后使用 Golang S3 SDK 中的 `s3.NewFromConfig` 构建一个 RustFS Client:
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+
接着就可以使用构造好的 RustFS Client 进行存储桶、对象的操作了。
48+
49+
50+
## 创建存储桶
51+
52+
```
53+
_, err = client.CreateBucket(ctx, &s3.CreateBucketInput{
54+
Bucket: aws.String("go-sdk-rustfs"),
55+
})
56+
if err != nil {
57+
log.Fatalf("create bucket failed: %v", err)
58+
}
59+
```
60+
61+
## 列出存储桶
62+
63+
```
64+
resp, err := client.ListBuckets(ctx, &s3.ListBucketsInput{})
65+
if err != nil {
66+
log.Fatalf("list buckets failed: %v", err)
67+
}
68+
69+
fmt.Println("Buckets:")
70+
for _, b := range resp.Buckets {
71+
fmt.Println(" -", *b.Name)
72+
}
73+
```
74+
75+
## 删除存储桶
76+
77+
```
78+
_, err = client.DeleteBucket(ctx, &s3.DeleteBucketInput{
79+
Bucket: aws.String("go-sdk-rustfs"),
80+
})
81+
if err != nil {
82+
log.Fatalf("delete bucket failed: %v", err)
83+
}
84+
```
85+
86+
## 列出存储对象
87+
88+
```
89+
resp, err := client.ListObjectsV2(ctx, &s3.ListObjectsV2Input{
90+
Bucket: aws.String("bucket-target"),
91+
})
92+
if err != nil {
93+
log.Fatalf("list object failed: %v", err)
94+
}
95+
for _, obj := range resp.Contents {
96+
fmt.Println(" -", *obj.Key)
97+
}
98+
```
99+
100+
## 上传对象
101+
102+
```
103+
_, err = client.PutObject(ctx, &s3.PutObjectInput{
104+
Bucket: aws.String("bucket-target"),
105+
Key: aws.String("test.txt"),
106+
Body: strings.NewReader("hello rustfs"),
107+
})
108+
if err != nil {
109+
log.Fatalf("upload object failed: %v", err)
110+
}
111+
```
112+
113+
## 下载对象
114+
115+
```
116+
resp, err := client.GetObject(ctx, &s3.GetObjectInput{
117+
Bucket: aws.String("bucket-target"),
118+
Key: aws.String("1.txt"),
119+
})
120+
if err != nil {
121+
log.Fatalf("download object fail: %v", err)
122+
}
123+
defer resp.Body.Close()
124+
125+
// read object content
126+
data, err := io.ReadAll(resp.Body)
127+
if err != nil {
128+
log.Fatalf("read object content fail: %v", err)
129+
}
130+
fmt.Println("content is :", string(data))
131+
```
132+
133+
其他的使用,大家可以自行探索,如果借助 Vibe Coding,就更简单了!

docs/zh/developer/sdk/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ RustFS 是 100% 兼容 S3 协议的分布式对象存储软件。 用户可以
1818
- [Python SDK](./python.md)
1919
- [Rust SDK](./rust.md)
2020
- [TypeScript SDK](./typescript.md)
21+
- [Golang SDK](./go.md)
2122

2223
## 阅读前名词解释
2324

docs/zh/developer/sdk/typescript.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ title: "RustFS TypeScript SDK 使用指南"
33
description: "通过 TypeScript SDK 来对 RustFS 实例进行操作,包括存储桶、对象的创建和删除."
44
---
55

6-
# TypeScript Rust SDK
6+
# TypeScript SDK
77

88
由于 RustFS 是完全兼容 S3 的对象存储系统,因此可以通过对 S3 的 TypeScript SDK 做一些封装来构建适用于 RustFS 的 TypeScript SDK,通过 SDK 对 RustFS 进行操作,包括存储桶/对象的创建和删除、文件的上传和下载等。
99

docs/zh/sidebar.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,6 +471,10 @@ export const sidebar = [
471471
text: 'TypeScript',
472472
link: '/zh/developer/sdk/typescript'
473473
},
474+
{
475+
text: 'Golang',
476+
link: '/zh/developer/sdk/go'
477+
},
474478
{
475479
text: '其他 SDK',
476480
link: '/zh/developer/sdk/other'

0 commit comments

Comments
 (0)