通过IDE使用阿里云Go SDK

更新时间:

本文以在Windows操作系统上,通过VS Code使用阿里云SDK为例,帮助您了解如何快速使用阿里云Go SDK。

前提条件

使用 SDK

使用OpenAPI门户提供的代码示例工程

说明

可能会存在OpenAPI无法下载代码示例工程的情况,您可以查看在已有项目中使用SDK的介绍。

  1. 进入OpenAPI门户的API调试页面,选择云产品和接口。例如我们以调用云服务器ECS的DescribeRegions接口为例,可在搜索栏中填入DescribeRegions,在搜索结果中单击API名称进入API调试页面。

    1716346246233_4A41CC11-FA46-4973-BC7B-C4AAD6E7F3F0

  2. 参数配置页签中填写需要的参数信息。填写时请参考右侧文档页签,充分了解接口的说明和注意事项(尤其是费用相关信息),以及各参数的具体含义和使用方法。

    如DescribeRegions接口支持传入三个参数:

    参数名

    是否必填

    说明

    InstanceChargeType

    非必填

    不同的实例计费方式可能支持的地域不同。默认值为PrePaid。

    ResourceType

    非必填

    不同的资源类型可能支持的地域不同。默认值为instance。

    AcceptLanguage

    非必填

    设置返回结果的语言。默认值为zh-CN。

    1716346635851_0B018C7F-D759-497b-B529-58E23E4AC41B

  3. 在右侧的SDK示例页面,选择语言,单击下载完整工程按钮,下载SDK完整工程至本地并解压。

    image

  4. 打开VS Code,在菜单栏单击File->Open Folder,选择解压后的文件夹。

  5. 在VS Code菜单栏中单击Terminal->New Terminal,将会在底部展示TERMINAL窗口。

    image

  6. 在Terminal中执行以下命令来整理和更新当前模块的依赖关系。

    go mod tidy
  7. 运行示例代码。在Terminal中执行以下命令,运行main包下的示例代码。

    go run ./main
  8. 查看运行结果。在Terminal中按下Ctrl+F,搜索statusCode,如果看到"statusCode":200表示调用成功。

    image

在已有项目中使用SDK

  1. 打开VS Code,在VS Code菜单栏,单击File->Open Folder,新建一个项目文件夹或者选择一个已有的项目文件夹。例如文件夹名称为gosdkproject,然后选择该文件夹。

  2. 在VS Code菜单栏中单击Terminal->New Terminal,将会在底部展示Terminal窗口。并在Terminal中执行go mod init gosdkprojects进行Go项目初始化。

    image

  3. 获取SDK。

    访问SDK中心,选择您想要使用的 SDK的云产品,这里以云服务器ECS为例。SDK版本选择V2.0,语言选择Go

    image

  4. 安装SDK。

    复制安装命令到Terminal中,然后按下回车执行。

    image

  5. 创建一个.go文件。在项目名称右边,单击New File...,填写文件名称,例如ecsDescribeRegions.go。

    image

  6. 初始化客户端。

    如您想调用ECS的API,必须先对ECS的客户端做初始化。

    重要
    1. 初始化客户端时需要使用AccessKey完成身份验证,请提前获取AccessKey。获取方法请参见创建AccessKey

    2. 获取RAM用户的AccessKey之后,还需要在环境变量中设置AccessKey,具体操作步骤请参见在Linux、macOS和Windows系统配置环境变量

    3. 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)
    }
    
  7. 调用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)
    }
    
  8. 异常处理。

    阿里云Go SDK通过返回报错信息来处理异常,详情请参见异常处理。但是在某些不可预料的情况下,可能需要使用panicrecover来处理异常。Go语言中使用panic来处理异常时,会立即停止当前函数的执行。所以一般还会搭配defer一起使用,在defer中通过recover函数捕获当前的panic,使正常执行流程恢复。因此,合理使用panicdeferrecover可以帮助构建更健壮的错误处理逻辑,尤其是在处理可能引起程序崩溃的严重错误时。

    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))
    }
    
  9. 在TERMINAL中使用go run命令运行。

    image

相关文档

进阶文档