安装Go SDK

本文以调用Function AI的查询项目接口GetProject为例,介绍Go SDK的安装和使用。关于GetProject接口的API文档,请参见GetProject - 查询项目

前提条件

  • 创建AccessKey

    调用阿里云OpenAPI通常需要设置访问密钥(AccessKey),由于阿里云账号(主账号)拥有资源的所有权限,AccessKey一旦泄露风险巨大,所以建议您使用满足最小化权限需求的RAM用户的AccessKey。

  • 在环境变量中配置AccessKey

    具体操作步骤,请参见Linux、macOSWindows系统配置环境变量

环境要求

Go 环境版本必须不低于 1.10.x。

安装SDK

复制下方提供的安装命令在Terminal中执行,以完成Function AI SDK的安装:

go get github.com/alibabacloud-go/devs-20230714

使用SDK

1.初始化客户端

SDK中,所有的OpenAPI均通过SDK提供的请求客户端(Client)发起调用。因此,在调用OpenAPI之前,需要先对请求客户端进行初始化。请求客户端支持多种方式初始化,本示例以通过AccessKey初始化客户端为例。更多初始化方式请参见管理访问凭据

package main

import (
	devs20230714 "github.com/alibabacloud-go/devs-20230714/v2/client"
	openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
	"github.com/alibabacloud-go/tea/tea"
	"os"
)

func CreateClient() (*devs20230714.Client, error) {
	return devs20230714.NewClient(&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:        tea.String("devs.cn-hangzhou.aliyuncs.com"),
	})
}

2. 构建接口的请求对象

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

说明

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

// 构造请求对象
GetProjectRequest := &devs20230714.GetProjectRequest{
    ProjectName: tea.String("your_project_name"),
  }

3. 发起调用

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

说明

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

// 设置运行时参数
runtime := &util.RuntimeOptions{}
// 调用 GetProject 接口
response, _err := Client.GetProjectWithOptions(GetProjectRequest, 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 (
  "encoding/json"
  "strings"
  "fmt"
  "os"
  devs20230714  "github.com/alibabacloud-go/devs-20230714/v2/client"
  openapi  "github.com/alibabacloud-go/darabonba-openapi/v2/client"
  util  "github.com/alibabacloud-go/tea-utils/v2/service"
  "github.com/alibabacloud-go/tea/tea"
)

func CreateClient() (*devs20230714.Client, error) {
	return devs20230714.NewClient(&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("devs.cn-hangzhou.aliyuncs.com"),
    })
}

func _main (args []*string) (_err error) {
  client, _err := CreateClient()
  if _err != nil {
    return _err
  }

  runtime := &util.RuntimeOptions{}
  headers := make(map[string]*string)
  tryErr := func()(_e error) {
    defer func() {
      if r := tea.Recover(recover()); r != nil {
        _e = r
      }
    }()
    // 复制代码运行请自行打印 API 的返回值
    _, _err = client.GetProjectWithOptions(tea.String("your_project_name"), headers, runtime)
    if _err != nil {
      return _err
    }

    return nil
  }()

  if tryErr != nil {
    var error = &tea.SDKError{}
    if _t, ok := tryErr.(*tea.SDKError); ok {
      error = _t
    } else {
      error.Message = tea.String(tryErr.Error())
    }
    // 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
    // 错误 message
    fmt.Println(tea.StringValue(error.Message))
    // 诊断地址
    var data interface{}
    d := json.NewDecoder(strings.NewReader(tea.StringValue(error.Data)))
    d.Decode(&data)
    if m, ok := data.(map[string]interface{}); ok {
      recommend, _ := m["Recommend"]
      fmt.Println(recommend)
    }
    _, _err = util.AssertAsString(error.Message)
    if _err != nil {
      return _err
    }
  }
  return _err
}


func main() {
  err := _main(tea.StringSlice(os.Args[1:]))
  if err != nil {
    panic(err)
  }
}

更多内容

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