歡迎使用阿里雲開發者工具套件(SDK)。阿里雲Go SDK讓您不用複雜編程即可訪問雲服務器、雲監控等多個阿里雲服務。這裏向您介紹如何獲取阿里雲Go SDK並開始調用。如果您在使用SDK的過程中遇到任何問題,歡迎前往阿里雲SDK問答社區提問,提問前請閱讀提問引導。亦可在當前GitHub提交Issues。
環境準備
要使用阿里雲Go SDK,您需要一個雲賬號以及一對Access Key ID和Access Key Secret。 請在阿里雲控制檯中的AccessKey管理頁面上創建和查看您的Access Key,或者聯繫您的系統管理員
要使用阿里雲SDK訪問某個產品的API,您需要事先在阿里雲控制檯中開通這個產品。
SDK獲取和安裝
使用go get下載安裝SDK
go get -u github.com/aliyun/alibaba-cloud-sdk-go/sdk
如果您使用了glide管理依賴,您也可以使用glide來安裝阿里雲GO SDK
glide get github.com/aliyun/alibaba-cloud-sdk-go
另外,阿里雲Go SDK也會發布在 https://develop.aliyun.com/tools/sdk#/go 這個地址。
開始調用
以下這個代碼示例向您展示了調用阿里雲GO SDK的3個主要步驟:
創建Client實例
創建API請求並設置參數
發起請求並處理異常
package main
import (
"github.com/aliyun/alibaba-cloud-sdk-go/services/ecs"
"fmt"
)
func main() {
// 創建ecsClient實例
ecsClient, err := ecs.NewClientWithAccessKey(
"<your-region-id>", // 您的可用區ID
"<your-access-key-id>", // 您的Access Key ID
"<your-access-key-secret>") // 您的Access Key Secret
if err != nil {
// 異常處理
panic(err)
}
// 創建API請求並設置參數
request := ecs.CreateDescribeInstancesRequest()
request.PageSize = "10"
// 發起請求並處理異常
response, err := ecsClient.DescribeInstances(request)
if err != nil {
// 異常處理
panic(err)
}
fmt.Println(response)
}
在創建Client實例時,您需要填寫3個參數:Region ID、Access Key ID和Access Key Secret。Access Key ID和Access Key Secret可以從控制檯獲得;而Region ID可以從地域列表中獲得
Keepalive
阿里雲Go SDK底層使用Go語言原生的net/http收發請求,因此配置方式與net/http相同,您可以通過config直接將配置傳遞給底層的httpClient
httpTransport := http.Transport{
// set http client options
}
config := sdk.NewConfig()
.WithHttpTransport(httpTransport)
.WithTimeout(timeout)
ecsClient, err := ecs.NewClientWithOptions(config)
併發請求
因Go語言的併發特性,我們建議您在應用層面控制SDK的併發請求。
爲了方便您的使用,我們也提供了可直接使用的併發調用方式,相關的併發控制由SDK內部實現。
開啓SDK Client的併發功能
// 最大併發數
poolSize := 2
// 可緩存的最大請求數
maxTaskQueueSize := 5
// 在創建時開啓異步功能
config := sdk.NewConfig()
.WithEnableAsync(true)
.WithGoRoutinePoolSize(poolSize) // 可選,默認5
.WithMaxTaskQueueSize(maxTaskQueueSize) // 可選,默認1000
ecsClient, err := ecs.NewClientWithOptions(config)
// 也可以在client初始化後再開啓
client.EnableAsync(poolSize, maxTaskQueueSize)
發起異步調用
阿里雲Go SDK支持兩種方式的異步調用:
使用channel作爲返回值
responseChannel, errChannel := client.FooWithChan(request)
// this will block
response := <-responseChannel
err = <-errChannel
使用callback控制回調
blocker := client.FooWithCallback(request, func(response *FooResponse, err error) {
// handle the response and err
})
// blocker 爲(chan int),用於控制同步,返回1爲成功,0爲失敗
// 在<-blocker返回失敗時,err依然會被傳入的callback處理
result := <-blocker
泛化調用接口(CommonApi)
什麼是CommonAPI
CommonAPI是阿里雲SDK推出的,泛用型的API調用方式。CommonAPI具有以下幾個特點:
輕量:只需Core包即可發起調用,無需下載安裝各產品線SDK。
簡便:無需更新SDK即可調用最新發布的API。
快速迭代
開始使用
CommonAPI,需要配合相應的API文檔使用,以查詢API的相關信息。
您可以在 文檔中心 查詢到所有產品的API文檔。
發起一次CommonAPI請求,需要您查詢到以下幾個參數:
域名(domain):即該產品的通用訪問域名,一版可以在”調用方式”頁查看到
API版本(version):即該API的版本號,以’YYYY-MM-DD’的形式表現,一般可以在”公共參數”頁面查到
接口名稱(apiName):即該API的名稱
我們以Ecs產品的DescribeInstanceStatus API爲例
package main
import (
"github.com/aliyun/alibaba-cloud-sdk-go/sdk/requests"
"github.com/aliyun/alibaba-cloud-sdk-go/sdk"
"fmt"
)
func main() {
client, err := sdk.NewClientWithAccessKey("cn-hangzhou", "{your_access_key_id}", "{your_access_key_id}")
if err != nil {
panic(err)
}
request := requests.NewCommonRequest()
request.Domain = "ecs.aliyuncs.com"
request.Version = "2014-05-26"
request.ApiName = "DescribeInstanceStatus"
request.QueryParams["PageNumber"] = "1"
request.QueryParams["PageSize"] = "30"
response, err := client.ProcessCommonRequest(request)
if err != nil {
panic(err)
}
fmt.Print(response.GetHttpContentString())
}
轉自:阿里雲優惠券