下載SDK
在天翼云官網下載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., `//gzoss.xstore.daliqc.cn/BUCKET/KEY`. By default, the S3 client
// will use virtual hosted bucket addressing when possible
// (`//BUCKET.gdoss.xstore.daliqc.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
}