本文以在Windows作業系統上,通過VS Code使用阿里雲SDK為例,協助您瞭解如何快速使用阿里雲Go SDK。
前提條件
已安裝Go,如您未安裝請參見在Windows安裝Go。
已安裝VS Code,如果您未安裝請參見在Windows搭建Go開發環境。
使用 SDK
使用OpenAPI門戶提供的程式碼範例工程
可能會存在OpenAPI無法下載程式碼範例工程的情況,您可以查看在已有專案中使用SDK的介紹。
進入OpenAPI門戶的API調試頁面,選擇雲產品和介面。例如我們以調用Elastic Compute Service的DescribeRegions介面為例,可在搜尋欄中填入DescribeRegions,在搜尋結果中單擊API名稱進入API調試頁面。
在參數配置頁簽中填寫需要的參數資訊。填寫時請參考右側文檔頁簽,充分瞭解介面的說明和注意事項(尤其是費用相關資訊),以及各參數的具體含義和使用方法。
如DescribeRegions介面支援傳入三個參數:
參數名
是否必填
說明
InstanceChargeType
非必填
不同的執行個體計費方式可能支援的地區不同。預設值為PrePaid。
ResourceType
非必填
不同的資源類型可能支援的地區不同。預設值為instance。
AcceptLanguage
非必填
設定返回結果的語言。預設值為zh-CN。
在右側的SDK樣本頁面,選擇語言,單擊下載完整工程按鈕,下載SDK完整工程至本地並解壓。
開啟VS Code,在功能表列單擊File->Open Folder,選擇解壓後的檔案夾。
在VS Code功能表列中單擊Terminal->New Terminal,將會在底部展示TERMINAL視窗。
在Terminal中執行以下命令來整理和更新當前模組的依賴關係。
go mod tidy
運行範例程式碼。在Terminal中執行以下命令,運行main包下的範例程式碼。
go run ./main
查看運行結果。在Terminal中按下
Ctrl+F
,搜尋statusCode
,如果看到"statusCode":200
表示調用成功。
在已有專案中使用SDK
開啟VS Code,在VS Code功能表列,單擊File->Open Folder,建立一個專案檔夾或者選擇一個已有的專案檔夾。例如檔案夾名稱為gosdkproject,然後選擇該檔案夾。
在VS Code功能表列中單擊Terminal->New Terminal,將會在底部展示Terminal視窗。並在Terminal中執行
go mod init gosdkprojects
進行Go專案初始化。擷取SDK。
訪問SDK中心,選擇您想要使用的 SDK的雲產品,這裡以Elastic Compute Service為例。SDK版本選擇V2.0,語言選擇Go。
安裝SDK。
複製安裝命令到Terminal中,然後按下斷行符號執行。
建立一個.go檔案。在專案名稱右邊,單擊New File...,填寫檔案名稱,例如ecsDescribeRegions.go。
初始化用戶端。
如您想調用ECS的API,必須先對ECS的用戶端做初始化。
重要初始化用戶端時需要使用AccessKey完成身分識別驗證,請提前擷取AccessKey。擷取方法請參見建立AccessKey。
擷取RAM使用者的AccessKey之後,還需要在環境變數中設定AccessKey,具體操作步驟請參見在Linux、macOS和Windows系統配置環境變數。
endpoint如何設定請參見服務存取點。
package main import ( "os" openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" ecs20140526 "github.com/alibabacloud-go/ecs-20140526/v4/client" "github.com/alibabacloud-go/tea/tea" ) // CreateClient 函數初始化並返回一個 ECS Client。 // 該函數不接受參數,但需要確保環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET 已經設定。 // return *ecs20140526.Client // return error:如果在建立用戶端過程中遇到任何錯誤,則返回非 nil 錯誤對象。 func CreateClient() (_result *ecs20140526.Client, _err error) { // 初始化 openapi.Config 對象,用於配置 ECS 用戶端。 config := &openapi.Config{ AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")), AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")), Endpoint: tea.String("ecs.cn-hangzhou.aliyuncs.com"), } // 使用配置資訊建立並返回一個 ECS 用戶端執行個體。 return ecs20140526.NewClient(config) }
調用API。在調用OpenAPI之前,您需要先瞭解OpenAPI的詳細資料,請查看API文檔,以調用ECS的DescribeRegions為例。
說明每個API都有獨立的請求對象,命名規則為${API名稱}${Request},例如DescribeRegionsRequest。
package main import ( "os" openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" ecs20140526 "github.com/alibabacloud-go/ecs-20140526/v4/client" "github.com/alibabacloud-go/tea/tea" ) // CreateClient 函數初始化並返回一個 ECS Client。 // 該函數不接受參數,但需要確保環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET 已經設定。 // return *ecs20140526.Client // return error:如果在建立用戶端過程中遇到任何錯誤,則返回非 nil 錯誤對象。 func CreateClient() (_result *ecs20140526.Client, _err error) { // 初始化 openapi.Config 對象,用於配置 ECS 用戶端。 config := &openapi.Config{ AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")), AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")), Endpoint: tea.String("ecs.cn-hangzhou.aliyuncs.com"), } // 使用配置資訊建立並返回一個 ECS 用戶端執行個體。 return ecs20140526.NewClient(config) } // InvokeApi 函數用於調用ECS的DescribeRegions介面,查詢可用的地區資訊。 // // 傳回值: // _result: 返回一個*ecs20140526.DescribeRegionsResponse類型的指標,包含查詢到的地區資訊。 // _err: 返回一個error類型的錯誤資訊,如果調用過程中發生錯誤,則該值非空。 func InvokeApi()(_result *ecs20140526.DescribeRegionsResponse, _err error) { // 建立ECS用戶端 client, _err := CreateClient() if _err != nil { // 如果建立用戶端過程中出現錯誤,直接返回錯誤資訊 return _result, _err } // 建立DescribeRegions請求 describeRegionsRequest := &ecs20140526.DescribeRegionsRequest{} // 發起DescribeRegions請求,並返回結果 return client.DescribeRegions(describeRegionsRequest) }
異常處理。
阿里雲Go SDK通過返回報錯資訊來處理異常,詳情請參見異常處理。但是在某些不可預料的情況下,可能需要使用
panic
和recover
來處理異常。Go語言中使用panic
來處理異常時,會立即停止當前函數的執行。所以一般還會搭配defer一起使用,在defer
中通過recover
函數捕獲當前的panic
,使正常執行流程恢複。因此,合理使用panic
,defer
和recover
可以協助構建更健壯的錯誤處理邏輯,尤其是在處理可能引起程式崩潰的嚴重錯誤時。package main import ( "fmt" "os" openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client" ecs20140526 "github.com/alibabacloud-go/ecs-20140526/v4/client" "github.com/alibabacloud-go/tea/tea" ) // CreateClient 函數初始化並返回一個 ECS Client。 // 該函數不接受參數,但需要確保環境變數 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET 已經設定。 // return *ecs20140526.Client // return error:如果在建立用戶端過程中遇到任何錯誤,則返回非 nil 錯誤對象。 func CreateClient() (_result *ecs20140526.Client, _err error) { // 初始化 openapi.Config 對象,用於配置 ECS 用戶端。 config := &openapi.Config{ AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")), AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")), Endpoint: tea.String("ecs.cn-hangzhou.aliyuncs.com"), } // 使用配置資訊建立並返回一個 ECS 用戶端執行個體。 return ecs20140526.NewClient(config) } // InvokeApi 函數用於調用ECS的DescribeRegions介面,查詢可用的地區資訊。 // // 傳回值: // _result: 返回一個*ecs20140526.DescribeRegionsResponse類型的指標,包含查詢到的地區資訊。 // _err: 返回一個error類型的錯誤資訊,如果調用過程中發生錯誤,則該值非空。 func InvokeApi() (_result *ecs20140526.DescribeRegionsResponse, _err error) { // 建立ECS用戶端 client, _err := CreateClient() if _err != nil { // 如果建立用戶端過程中出現錯誤,直接返回錯誤資訊 return _result, _err } // 建立DescribeRegions請求 describeRegionsRequest := &ecs20140526.DescribeRegionsRequest{} // 發起DescribeRegions請求,並返回結果 return client.DescribeRegions(describeRegionsRequest) } // 該函數主要實現了通過調用API擷取地區資訊,並在發生異常時進行恢複和處理。 func main() { // 在深度遞迴或無法預料的報錯等情境下,才推薦使用defer defer func() { if err := tea.Recover(recover()); err != nil { // 當捕獲到異常時,根據異常類型進行處理 if sdkError, ok := err.(*tea.SDKError); ok { // 列印SDK錯誤資訊、錯誤碼和相關資料 fmt.Println(tea.StringValue(sdkError.Message)) fmt.Println(tea.StringValue(sdkError.Code)) fmt.Println(tea.StringValue(sdkError.Data)) } else { // 列印其他類型錯誤資訊 fmt.Println(err) } } }() // 調用API擷取結果 result, _ := InvokeApi() // 遍曆並列印結果中的地區資訊 for _, region := range result.Body.Regions.Region { fmt.Println("regionId: " + tea.StringValue(region.RegionId)) } // 列印RequestId fmt.Println("RequestId: " + tea.StringValue(result.Body.RequestId)) }
在TERMINAL中使用
go run
命令運行。