下载SDK
在天翼云官网下载xos-go-sdk.zip,下载地址: xos-go-sdk.zip
获取访问密钥
AccessKey(AK)和SecretAccessKey(SK)是用户访问媒体存储服务的密钥,密钥的管理和获取方式请查阅 天翼云媒体存储 密钥管理 。
获取Endpoint
EndPoint的获取方式请查阅天翼云媒体存储 基础信息查看。
创建工程
下面过程以实现列出媒体存储服务中的bucket功能为例,说明了如何使用媒体存储go-sdk进行应用开发。
初始化go mod
新建一个项目文件夹go-sdk-demo,在该文件夹路径下执行命令
go mod init {moduleName}
生成go.mod文件,例如:go mod init sdk-demo
导入sdk代码
将下载的媒体存储go-sdk代码解压,获得vendor文件夹。在项目文件夹下执行命令导入依赖:
go mod edit -require=github.com/aws/aws-sdk-go@v1.35.5
执行命令将依赖替换为本地包:
go mod edit -replace=github.com/aws/aws-sdk-go@v1.35.5={path of vendor}/github.com/aws/aws-sdk-go
其中{path of vendor}是vendor文件夹在本地的路径,例如:
go mod edit -replace=github.com/aws/aws-sdk-go@v1.35.5=C:/Users/admin/Desktop/vendor/github.com/aws/aws-sdk-go
下载sdk所需依赖:
go mod download github.com/jmespath/go-jmespath
新建一个demo.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 = "<your-endpoint>" AccessKey = "<your-access-key>" SecretAccessKey = "<your-secret-access-key>" ) func BuildClient() *s3.S3 { conf := &aws.Config{ Endpoint: aws.String(Endpoint), S3ForcePathStyle: aws.Bool(false), DisableSSL: aws.Bool(true), Credentials: credentials.NewStaticCredentials(AccessKey, SecretAccessKey, ""), LogLevel: aws.LogLevel(aws.LogDebug)} sess := session.Must(session.NewSessionWithOptions(session.Options{Config: *conf})) svc := s3.New(sess) return svc } func main() { svc := BuildClient() result, err := svc.ListBuckets(&s3.ListBucketsInput{}) if err != nil { fmt.Printf("fail to list buckets. %v\n", err) } else { fmt.Println(result) } }
执行命令以下运行程序并查看结果。
go mod tidy go mod vendor go run ./demo.go
整个项目的内容层次如下:
go-sdk-demo/
├── demo.go
├── go.mod
├── go.sum
└── vendor
设置service_client
使用SDK访问对象存储服务,首先需要提供正确的AccessKey和SecretAccessKey以及服务端地址EndPoint,用于设置一个service client。
创建session
配置service client首先需要创建一个session, session包含了service client的配置信息,例如AccessKey、SecretAccessKey以及发送请求的附加信息等。一个session可以被用于创建多个service client。
代码示例:
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 = "<your-endpoint>"
AccessKey = "<your-access-key>"
SecretAccessKey = "<your-secret-access-key>"
)
// BuildSession 创建并返回一个session
func BuildSession() *session.Session {
conf := &aws.Config{
Endpoint: aws.String(Endpoint),
// Set this to `true` to force the request to use path-style addressing,
// i.e., `http://gzoss.xstore.ctyun.cn/BUCKET/KEY`. By default, the S3 client
// will use virtual hosted bucket addressing when possible
// (`http://BUCKET.gdoss.xstore.ctyun.cn/KEY`)
S3ForcePathStyle: aws.Bool(false),
//Set this to `true` to disable SSL when sending requests. Defaults to `false`
DisableSSL: aws.Bool(true),
Credentials: credentials.NewStaticCredentials(AccessKey, SecretAccessKey, ""),
LogLevel: aws.LogLevel(aws.LogDebug)}
sess := session.Must(session.NewSessionWithOptions(session.Options{Config: *conf}))
return sess
}
创建service client
代码示例:
// 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, ""),
LogLevel: aws.LogLevel(aws.LogDebug)}
sess := session.Must(session.NewSessionWithOptions(session.Options{Config: *conf}))
svc := s3.New(sess)
return svc
}