全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 更多
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 智能硬件
阿里云SDK开发指南

使用Go SDK

更新时间:2018-02-24 19:08:52

安装

阿里云Go SDK支持Go 1.7及以上版本,您可以通过以下方式安装Go SDK:

  • 使用Glide(推荐)

    如果您使用了Glide管理依赖,您可以使用Glide来安装阿里云GO SDK。执行以下命令,安装Go SDK:

    1. glide get github.com/aliyun/alibaba-cloud-sdk-go
  • 使用govendor

    执行以下命令,安装Go SDK:

    1. go get -u github.com/aliyun/alibaba-cloud-sdk-go/sdk

您也可以在阿里云SDK频道页面下载Go SDK的源码。

设置身份验证凭据

当使用阿里云SDK访问阿里云服务时,您需要提供阿里云账号进行身份验证。

目前,Go SDK支持以下几种身份验证方式:

验证方式 说明
AccessKey 使用AccessKey ID和AccessKey Secret访问
StsToken 使用STS Token访问
RamRoleArn 使用RAM子账号的AssumeRole方式访问
EcsRamRole 在ECS实例上通过EcsRamRole实现免密验证
RsaKeyPair 使用RSA公私钥方式(仅日本站支持)

本文以AccessKey为例说明如何设置凭据。为了保证您的账号安全,建议您使用RAM账号来访问阿里云服务。阿里云账号的AccessKey对拥有的资源有完全的权限。RAM账号由阿里云账号授权创建,仅有对特定资源限定的操作权限。参考创建AccessKey获取RAM账号的AccessKey。

使用AccessKey作为访问凭据,需要在初始化Client时设置凭证。

注意:确保包含AccessKey的代码不会泄漏(例如提交到外部公开的GitHub项目),否则将会危害您的阿里云账号的信息安全。

  1. // 创建ecsClient实例
  2. ecsClient, err := ecs.NewClientWithAccessKey(
  3. "<your-region-id>", // 您的可用区ID
  4. "<your-access-key-id>", // 您的Access Key ID
  5. "<your-access-key-secret>") // 您的Access Key Secret

如果要使用自定义的Config,或使用AccessKey以外的凭据,您需要先创建一个Credential对象来保存凭据,并在初始化Client时提交此Credential对象。

  1. // 自定义config
  2. config := NewConfig()
  3. // 创建credential对象
  4. credential := &credentials.BaseCredential{
  5. AccessKeyId: "<your-access-key-id>",
  6. AccessKeySecret: "<your-access-key-secret>",
  7. }
  8. // 初始化client
  9. client, err := NewClientWithOptions("cn-hangzhou", config, credential)

发起调用

本文以ECS为例,介绍如何使用阿里云Go SDK发起请求。

  1. 导入阿里云产品的SDK。

    1. import github.com/aliyun/alibaba-cloud-sdk-go/services/ecs
  2. 新建一个ecsClient,该client中包含ECS的所有API。

    1. ecsClient := ecs.NewClientWithAccessKey(
    2. "<your-region-id>",
    3. "<your-access-key-id>",
    4. "<your-access-key-secret>")
  3. 使用xxx.CreateXXXRequest方法创建一个request,并赋值相关的请求参数。

    该方法的命名规范为${service}.Create${apiName}Request,其中:

    • ${service}为产品名称(小写),例如 ecs、oss、slb等

    • ${apiName}为API名称(大驼峰),例如 DescribeInstanceAttribute

    1. request := ecs.CreateDescribeInstanceAttributeRequest()
    2. request.InstanceId = "<instanceId>"
  4. 发起调用。

    1. response, err := ecsClient.DescribeInstanceAttribute(request)
  5. 处理应答。

    正常情况下,应答中的所有字段,都会被反序列化到response中,您可以直接调用response.getXXX()来获得应答中的字段。

    1. instanceStatus := response.Status

    如果出现了异常(err != nil),或您需要原始HTTP应答,您可以通过以下几种方式获得原始数据:

    1. // 获取原始http应答,返回类型为 *http.Response
    2. httpResponse := response.GetOriginHttpResponse()
    3. // 获取原始http应答的statusCode,返回类型为 int
    4. statusCode := response.GetHttpStatus()
    5. // 获取原始http应答的header,返回类型为 map[string][]string
    6. headers := response.GetHttpHeaders()
    7. // 获取原始http应答的content,返回类型为[]byte
    8. contentBytes := response.GetHttpContentBytes()
    9. // 获取原始http应答的content, 并按照UTF-8转码为string,返回类型为string
    10. contentString := response.GetHttpContentString()

    说明:如果服务器端返回的statusCode不在[200,300) 范围内,会返回ServerError,详情参见错误处理

本文导读目录