前言
开发者在使用ZOS服务时,往往会使用对应的SDK,SDK提供了一系列的API和工具,可以简化与ZOS服务的交互和开发过程。开发者可以使用SDK提供的高级函数,无需手动处理低级的HTTP请求和响应。
而在所有的SDK当中,golang的SDK有以下几个优点:
- 高性能:golang是一种编译型语言,具有出色的性能。并且golang的sdk不像C++那样需要开发者手动编译后才能使用。
- 并发性能:golang天生支持并发,可以轻松处理多个请求。这对于同时上传或下载多个文件非常有用,可以提高效率。
- 轻量级:golang的SDK相对较小,不会占用太多的系统资源。这对于在资源受限的环境中运行应用程序非常有利。
- 跨平台支持:golang的SDK可以在各种操作系统上运行,这使得开发人员可以在不同的平台上使用相同的代码。
下面将介绍golang SDK的配置和使用方法。
环境准备
开发者的机器上需要安装1.5或更高版本的golang,如需下载特定版本的golang,可以在golang官网下载历史版本。
为确保后续流程顺畅,需为golang配置goproxy,具体方式可参考goproxy官网主页。
golang SDK 的初始化以及使用
接下来以“列出桶”功能为例,说明如何从零开始创建一个golang SDK项目。
首先依次使用下列指令初始化项目:
# 生成go.mod文件
go mod init sdk-demo
# 获取远程库
go get github.com/aws/aws-sdk-go@v1.35.5
等待`go get`运行完成后,项目根目录的`go.mod`文件中会多出`github.com/aws/aws-sdk-go`和`github.com/jmespath/go-jmespath`这两项依赖,其中`aws-sdk-go`为SDK本体,`go-jmespath`用于辅助goalng处理JSON数据。
创建`test.go`文件,内容如下:
// test.go的文件内容
package main
import (
"fmt"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3"
)
const (
Endpoint = "YourEndpoint"
AccessKey = "YourAccessKey"
SecretAccessKey = "YourSecretAccessKey"
)
func main() {
svc := BuildClient()
// 调用“列出桶”的内置函数
result, err := svc.ListBuckets(&s3.ListBucketsInput{})
if err != nil {
fmt.Printf("Unable to list buckets. %v\n", err)
} else {
fmt.Println(result)
}
}
// BuildClient 创建并返回一个service client
func BuildClient() *s3.S3 {
conf := &aws.Config{
Endpoint: aws.String(Endpoint),
S3ForcePathStyle: aws.Bool(false),
DisableSSL: aws.Bool(true),
Credentials: credentials.NewStaticCredentials(AccessKey, SecretAccessKey, ""),
// 填写操作桶所在的地区
Region: aws.String("us-east-1"),
}
sess := session.Must(session.NewSessionWithOptions(session.Options{Config: *conf}))
svc := s3.New(sess)
return svc
}
完成上述操作之后,可以执行`go run ./test.go`查看运行结果,此时还没有创建桶,成功运行的理论结果如下:
{
Owner: {
DisplayName: "M. Tester",
ID: "testid"
}
}
创建 session 和 service client 的通用方法
使用golang SDK访问ZOS服务,需要使用AccessKey,SecretAccessKey和Endpoint来设置svc(service client)。配置svc首先需要创建一个session,session包含了svc的配置信息,一个session可用于创建多个svc。
下面是创建session和svc的示例代码:
// 依赖和需要提供的信息
import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3"
)
const (
Endpoint = "YourEndpoint"
AccessKey = "YourAccessKey"
SecretAccessKey = "YourSecretAccessKey"
)
// BuildSession 创建并返回一个session
func BuildSession() *session.Session {
conf := &aws.Config{
Endpoint: aws.String(Endpoint),
S3ForcePathStyle: aws.Bool(false),
DisableSSL: aws.Bool(true),
Credentials: credentials.NewStaticCredentials(AccessKey, SecretAccessKey, ""),
// 填写操作桶所在的地区
Region: aws.String("us-east-1"),
}
sess := session.Must(session.NewSessionWithOptions(session.Options{Config: *conf}))
return sess
}
// BuildClient 创建并返回一个service client
func BuildClient() *s3.S3 {
conf := &aws.Config{
Endpoint: aws.String(Endpoint),
S3ForcePathStyle: aws.Bool(false),
DisableSSL: aws.Bool(true),
Credentials: credentials.NewStaticCredentials(AccessKey, SecretAccessKey, ""),
// 填写操作桶所在的地区
Region: aws.String("us-east-1"),
}
sess := session.Must(session.NewSessionWithOptions(session.Options{Config: *conf}))
svc := s3.New(sess)
return svc
}