赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 云服务器 ECS
  4. 开发参考
  5. SDK参考
  6. Go SDK调用示例

Go SDK调用示例

  • SDK参考
  • 发布于 2025-04-01
  • 0 次阅读
文档编辑
文档编辑

本文以调用查询一台或多台ECS实例的详细信息(DescribeInstances)接口为例,为您介绍Go V2.0 SDK的安装和使用。

前提条件

  1. 由于阿里云账号(主账号)拥有资源的所有权限,其AccessKey一旦泄露风险巨大,所以建议您使用满足最小化权限需求的RAM用户的AccessKey。具体操作方式请参见创建AccessKey。

  2. 给RAM用户授予操作云服务器ECS相关资源的权限。本文提供的示例代码为查询示例,所以选择AliyunECSReadonlyAccess系统权限策略,您在使用的时候可以根据业务需求进行自定义授权。

    1. 使用自定义权限策略。

      关于如何创建自定义权限策略,请参见创建自定义权限策略和授权信息。

      云服务器ECS依据最佳实践提供了一些自定义权限策略示例,您可以参考这些示例以快速创建符合自身业务需求的自定义权限策略,具体详情请参见云服务器ECS自定义权限策略参考。

    2. 使用系统权限策略。

      云服务器ECS支持的所有系统权限策略及其对应的权限描述,请参见云服务器 ECS系统权限策略参考。

  3. 在环境变量中配置AccessKey,具体操作步骤请参见在Linux、macOS和Windows系统配置环境变量。

安装SDK

Go V2.0 SDK安装方式请参见SDK 中心。您可以直接复制下方提供的安装命令在Terminal中执行,以完成ECS SDK的安装:

go get github.com/alibabacloud-go/darabonba-openapi/v2/client

使用SDK

1. 初始化客户端

阿里云SDK支持多种访问凭据用于初始化客户端,例如AccessKey和STS Token等,更多方式请参见管理访问凭证。本示例以通过AccessKey初始化客户端为例。

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"
)

func CreateClient() (_result *ecs20140526.Client, _err error) {
	config := &openapi.Config{
		// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
		AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
		// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
		AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
	}
	// Endpoint 请参考 https://api.aliyun.com/product/Ecs
	config.Endpoint = tea.String("ecs-cn-hangzhou.aliyuncs.com")
	_result = &ecs20140526.Client{}
	_result, _err = ecs20140526.NewClient(config)
	return _result, _err
}

2. 构建接口的请求对象

在构建请求对象之前,请查看该接口的API文档获取参数信息。

说明

请求对象命名规则:{API名称}Request,例如DescribeInstances该接口的请求对象为DescribeInstancesRequest。

// 构造请求对象
describeInstancesRequest := &ecs20140526.DescribeInstancesRequest{
    RegionId: tea.String("cn-hangzhou"),
  }

3. 发起调用

通过客户端调用OpenAPI时,支持设置运行时参数,例如超时配置、代理配置等,更多信息请查看进阶配置。

说明

接口返回对象命名规则:{API名称}Response,例如DescribeInstances该接口的返回对象为DescribeInstancesResponse。

// 设置运行时参数
runtime := &util.RuntimeOptions{}
// 调用 DescribeInstances 接口
response, _err := ecsClient.DescribeInstancesWithOptions(describeInstancesRequest, runtime)
if _err != nil {
	panic(_err)
}
fmt.Println(response.Body.String())

4. 异常处理

Go SDK将异常进行了细致的分类,主要划分为以下几种error:

  • error:非业务报错的error,比如SDK源文件被修改导致的校验error,解析失败导致的error等。

  • SDKError:在SDK的请求中主要以业务报错为主的error。

建议采取合理的措施来处理异常,比如合理地传播异常、记录日志、尝试恢复等,以确保系统的健壮性和稳定性。

5. 完整示例

package main

import (
	"fmt"
	"os"

	openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
	ecs20140526 "github.com/alibabacloud-go/ecs-20140526/v4/client"
	util "github.com/alibabacloud-go/tea-utils/v2/service"
	"github.com/alibabacloud-go/tea/tea"
)

func CreateClient() (_result *ecs20140526.Client, _err error) {
	config := &openapi.Config{
		// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
		AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
		// 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
		AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
	}
	// Endpoint 请参考 https://api.aliyun.com/product/Ecs
	config.Endpoint = tea.String("ecs-cn-hangzhou.aliyuncs.com")
	_result = &ecs20140526.Client{}
	_result, _err = ecs20140526.NewClient(config)
	return _result, _err
}

func main() {
	ecsClient, _err := CreateClient()
	if _err != nil {
		panic(_err)
	}
	// 构造请求对象
	describeInstancesRequest := &ecs20140526.DescribeInstancesRequest{
		RegionId: tea.String("cn-hangzhou"),
	}
	// 设置运行时参数
	runtime := &util.RuntimeOptions{}
	resp, tryErr := func() (response *ecs20140526.DescribeInstancesResponse, _e error) {
		defer func() {
			if r := tea.Recover(recover()); r != nil {
				_e = r
			}
		}()
		// 调用 DescribeInstances 接口
		response, _err := ecsClient.DescribeInstancesWithOptions(describeInstancesRequest, runtime)
		if _err != nil {
			return nil, _err
		}
		return response, nil
	}()

	if tryErr != nil {
		if sdkError, ok := tryErr.(*tea.SDKError); ok { // 使用类型断言判断 tryErr 是否为 *tea.SDKError 类型
			// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
			fmt.Println(tea.StringValue(sdkError.Message))
			fmt.Println(tea.StringValue(sdkError.Code))
			fmt.Println(tea.StringValue(sdkError.Data))
		} else {
			// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
			fmt.Println(tea.String(tryErr.Error()))
		}
	} else {
		fmt.Println(resp.Body)
	}
}

场景化示例

  • 批量创建ECS实例

  • ECS实例列表查询

  • 续费ECS实例

  • 释放ECS实例

  • 查询可用的变配资源

  • 查询抢占式实例库存

  • 查询抢占式实例当前价格

  • 创建抢占式实例

  • 增加安全组规则

  • 新建安全组并将指定资源加入到安全组

  • 创建弹性网卡

  • 附加弹性网卡

  • 分离弹性网卡

  • 删除弹性网卡

  • 变更ECS实例规格

  • 调整实例的实例规格和公网带宽

  • 指定实例规格获取一个或多个备选的实例规格

  • 通过备选实例规格创建ECS实例最佳实践

更多内容

除了使用上述调用方式外,您还可以使用泛化调用方式调用ECS的OpenAPI,详细介绍请参见泛化调用。

若您当前使用的是V1.0 SDK,并希望进一步了解V1.0 SDK的相关内容,请参见V1.0 Go SDK。

相关文章

.NET SDK调用示例 2025-04-01 11:58

本文以调用查询一台或多台ECS实例的详细信息(DescribeInstances)接口为例,为您介绍.NET V2.0 SDK的安装和使用。 前提条件 由于阿里云账号(主账号)拥有资源的所有权限,其Access

Go SDK调用示例 2025-04-01 11:58

本文以调用查询一台或多台ECS实例的详细信息(DescribeInstances)接口为例,为您介绍Go V2.0 SDK的安装和使用。 前提条件 由于阿里云账号(主账号)拥有资源的所有权限,其AccessKe

Java SDK调用示例 2025-04-01 11:58

本文以调用查询一台或多台ECS实例的详细信息(DescribeInstances)接口为例,为您介绍Java V2.0 SDK的安装和使用。 前提条件 由于阿里云账号(主账号)拥有资源的所有权限,其AccessKey一旦泄露风险巨大,所以建议

Node.js SDK调用示例 2025-04-01 11:58

本文以调用查询一台或多台ECS实例的详细信息(DescribeInstances)接口为例,为您介绍Node.js V2.0 SDK的安装和使用。 前提条件 由于阿里云账号(主账号)拥有资源的所有权限,其Acc

PHP SDK调用示例 2025-04-01 11:58

本文以调用查询一台或多台ECS实例的详细信息(DescribeInstances)接口为例,为您介绍PHP V2.0 SDK的安装和使用。 前提条件 由于阿里云账号(主账号)拥有资源的所有权限,其AccessK

Python SDK调用示例 2025-04-01 11:58

本文以调用查询一台或多台ECS实例的详细信息(DescribeInstances)接口为例,为您介绍Python V2.0 SDK的安装和使用。 前提条件 由于阿里云账号(主账号)拥有资源的所有权限,其Acce

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号