Todos os produtos
Search
Central de documentação

Alibaba Cloud SDK:Integrar o SDK

Última atualização: Aug 21, 2026

Integre o Alibaba Cloud SDK ao seu projeto Go para chamar operações da OpenAPI. O processo envolve três etapas: importar o SDK, definir as credenciais de acesso e chamar a API.

Pré-requisitos

  • Go 1.10 ou posterior.

Importar o SDK

  1. Faça logon no SDK Center e selecione o product correspondente à API que deseja chamar, como o Short Message Service (SMS).

  2. Na página Installation e, em All Languages, escolha Go. Em seguida, na aba Quick Start, localize o método de instalação do SDK para o Short Message Service (SMS).

Definir credenciais de acesso

As chamadas à OpenAPI do Alibaba Cloud exigem credenciais de acesso, como um AccessKey ou um Security Token Service (STS) token. Armazene as credenciais em variáveis de ambiente para evitar vazamentos. As melhores práticas de segurança estão descritas em Securely use access credentials. O exemplo a seguir utiliza ALIBABA_CLOUD_ACCESS_KEY_ID e ALIBABA_CLOUD_ACCESS_KEY_SECRET.

Configurar no Linux e macOS

Configurar variáveis de ambiente com o comando export

Importante

Uma variável de ambiente temporária definida com o comando export é válida apenas para a sessão atual. A variável é removida quando a sessão termina. Para retenção de longo prazo (LTR), adicione o comando export ao arquivo de configuração de inicialização do seu sistema operacional.

  • Configure o AccessKey ID e pressione Enter.

    # Replace yourAccessKeyID with your AccessKey ID.
    export ALIBABA_CLOUD_ACCESS_KEY_ID=yourAccessKeyID
  • Configure o AccessKey secret e pressione Enter.

    # Replace yourAccessKeySecret with your AccessKey secret.
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=yourAccessKeySecret
  • Verifique a configuração.

    Execute o comando echo $ALIBABA_CLOUD_ACCESS_KEY_ID. Se o comando retornar o AccessKey ID correto, a configuração foi bem-sucedida.

Configurar no Windows

Usar a interface gráfica do usuário (GUI)

  • Procedimento

    Os passos a seguir descrevem como definir variáveis de ambiente usando a GUI no Windows 10.

    Na área de trabalho, clique com o botão direito em Este PC e escolha Properties > Advanced system settings > Environment Variables > New em System variables ou User variables. Em seguida, conclua a configuração.

    Variável

    Valor de exemplo

    AccessKey ID

    • Nome da variável: ALIBABA_CLOUD_ACCESS_KEY_ID

    • Valor da variável: yourAccessKeyID

    AccessKey Secret

    • Nome da variável: ALIBABA_CLOUD_ACCESS_KEY_SECRET

    • Valor da variável: yourAccessKeySecret

  • Testar a configuração

    Clique em Start (ou use o atalho de teclado Win+R), clique em Run, insira cmd e clique em OK (ou pressione Enter) para abrir o prompt de comando. Execute os comandos echo %ALIBABA_CLOUD_ACCESS_KEY_ID% e echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Se os comandos retornarem o AccessKey correto, a configuração foi bem-sucedida.

Usar o prompt de comando (CMD)

  • Procedimento

    Abra o prompt de comando como administrador e execute os comandos a seguir para adicionar novas variáveis de ambiente ao sistema.

    setx ALIBABA_CLOUD_ACCESS_KEY_ID yourAccessKeyID /M
    setx ALIBABA_CLOUD_ACCESS_KEY_SECRET yourAccessKeySecret /M

    O parâmetro /M indica uma variável de ambiente do sistema. Omita esse parâmetro ao definir uma variável de ambiente de usuário.

  • Testar a configuração

    Clique em Start (ou use o atalho de teclado Win+R), clique em Run, insira cmd e clique em OK (ou pressione Enter) para abrir o prompt de comando. Execute os comandos echo %ALIBABA_CLOUD_ACCESS_KEY_ID% e echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Se os comandos retornarem o AccessKey correto, a configuração foi bem-sucedida.

Usando Windows PowerShell

No PowerShell, defina novas variáveis de ambiente válidas para todas as novas sessões:

[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_ID', 'yourAccessKeyID', [System.EnvironmentVariableTarget]::User)
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_SECRET', 'yourAccessKeySecret', [System.EnvironmentVariableTarget]::User)

Para definir variáveis de ambiente para todos os usuários, são necessárias permissões administrativas:

[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_ID', 'yourAccessKeyID', [System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_SECRET', 'yourAccessKeySecret', [System.EnvironmentVariableTarget]::Machine)

Defina variáveis de ambiente temporárias, válidas apenas para a sessão atual:

$env:ALIBABA_CLOUD_ACCESS_KEY_ID = "yourAccessKeyID"
$env:ALIBABA_CLOUD_ACCESS_KEY_SECRET = "yourAccessKeySecret"

No PowerShell, execute os comandos Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_ID e Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_SECRET. Se os comandos retornarem o AccessKey correto, a configuração foi bem-sucedida.

Usar o SDK

O exemplo a seguir chama a API SendMessageToGlobe do Short Message Service (SMS). Referência da API SendMessageToGlobe: SendMessageToGlobe.

1. Inicializar o cliente de requisição

Todas as chamadas à OpenAPI com o SDK V2.0 passam por um cliente de requisição. Este exemplo inicializa o cliente com um AccessKey. Outros métodos de inicialização estão descritos em Manage access credentials.

Importante
  • A instância do cliente é thread-safe. Não é necessária uma instância separada por thread.

  • Evite criar objetos de cliente repetidamente — isso desperdiça recursos e degrada o desempenho. Utilize o padrão singleton para garantir um único cliente por par de credencial e endpoint durante todo o ciclo de vida da aplicação.

import (
  openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
  dysmsapi20180501 "github.com/alibabacloud-go/dysmsapi-20180501/v2/client"
  util "github.com/alibabacloud-go/tea-utils/v2/service"
  "os"
)

func CreateClient () (_result *dysmsapi20180501.Client, _err error) {
  config := &openapi.Config{
    // Required, please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID is set.
    AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
    // Required, please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_SECRET is set.
    AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
  }
  config.Endpoint = tea.String("dysmsapi.aliyuncs.com")
  _result = &dysmsapi20180501.Client{}
  _result, _err = dysmsapi20180501.NewClient(config)
  return _result, _err
}

2. Criar uma instância da struct Request

Passe os parâmetros da API por meio da struct Request do SDK, denominada <Nome da OpenAPI>Request (por exemplo, SendSmsRequest para a API SendSms). Detalhes dos parâmetros: SendMessageToGlobe.

Nota

APIs sem parâmetros de requisição (como DescribeCdnSubList) não exigem um objeto de requisição.

// Create request object and set required input parameters
sendMessageToGlobeRequest := &dysmsapi20180501.SendMessageToGlobeRequest{
  // Please replace with the actual recipient number.
  To: tea.String("<YOUR_VALUE>"),
  // Please replace with the actual SMS content.
  Message: tea.String("<YOUR_VALUE>"),
}

3. Enviar a requisição

Chame uma OpenAPI usando a função <NomeDaAPI>WithOptions, que recebe um ponteiro para a struct Request da API e um ponteiro para a struct de opções de runtime. As opções de runtime controlam timeouts, proxies e outros comportamentos da requisição. Advanced configurations.

Nota

Para APIs sem parâmetros de requisição (como DescribeCdnSubList), passe apenas as opções de runtime.

//  You need to add util "github.com/alibabacloud-go/tea-utils/v2/service" to the import. 

func _main() (_result *dysmsapi20180501.SendMessageToGlobeResponse, _err error) {
  client, _err := CreateClient()
  if _err != nil {
    return nil, _err
  }
  // Create request object and set required input parameters
  sendMessageToGlobeRequest := &dysmsapi20180501.SendMessageToGlobeRequest{
    // Please replace with the actual recipient number.
    To: tea.String("<YOUR_VALUE>"),
    // Please replace with the actual SMS content.
    Message: tea.String("<YOUR_VALUE>"),
  }
  runtime := &util.RuntimeOptions{}
  // To run the code, copy it and print the API return value.
  response, _err := client.SendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime)
  if _err != nil {
    return nil, _err
  }
  return response, _err
}

4. Tratar exceções

O SDK V2.0 para Go classifica as exceções em dois tipos principais: error e SDKError.

  • error: Erros não relacionados a negócios, como erros de validação causados por modificações nos arquivos-fonte do SDK ou erros de parsing.

  • SDKError: Erros relacionados a negócios.

Orientações detalhadas sobre tratamento de exceções estão disponíveis em Handle exceptions.

Importante

Sempre trate exceções propagando-as, registrando-as em log ou recuperando-se delas para garantir a estabilidade do sistema.

Clique para visualizar o exemplo de código completo

Exemplos de chamada da API SendMessageToGlobe

package main

import (
  "fmt"
  openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
  dysmsapi20180501 "github.com/alibabacloud-go/dysmsapi-20180501/v2/client"
  util "github.com/alibabacloud-go/tea-utils/v2/service"
  "github.com/alibabacloud-go/tea/tea"
  "os"
)

func CreateClient() (_result *dysmsapi20180501.Client, _err error) {
  config := &openapi.Config{
    // Required, please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID is set.
    AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
    // Required, please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_SECRET is set.
    AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
  }
  config.Endpoint = tea.String("dysmsapi.aliyuncs.com")
  _result = &dysmsapi20180501.Client{}
  _result, _err = dysmsapi20180501.NewClient(config)
  return _result, _err
}

func _main() (_result *dysmsapi20180501.SendMessageToGlobeResponse, _err error) {
  client, _err := CreateClient()
  if _err != nil {
    return nil, _err
  }
  // Create request object and set required input parameters
  sendMessageToGlobeRequest := &dysmsapi20180501.SendMessageToGlobeRequest{
    // Please replace with the actual recipient number.
    To: tea.String("<YOUR_VALUE>"),
    // Please replace with the actual SMS content.
    Message: tea.String("<YOUR_VALUE>"),
  }
  runtime := &util.RuntimeOptions{}
  // To run the code, copy it and print the API return value.
  response, _err := client.SendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime)
  if _err != nil {
    return nil, _err
  }
  return response, _err
}

func main() {
  response, err := _main()
  if err != nil {
    panic(err)
  }
  fmt.Println(response.Body)
}

Cenário especial: Configurar a API Advance para upload de arquivos

Alguns produtos cloud (como Image Search e Visual Intelligence API) exigem a API Advance para uploads de arquivos locais. Essa API aceita um stream de arquivo, armazena-o temporariamente no Alibaba Cloud OSS (região padrão: cn-shanghai) e o processa. Este exemplo utiliza a API DetectBodyCount do Visual Intelligence API.

Nota

Arquivos temporários armazenados no Alibaba Cloud OSS são excluídos periodicamente.

  1. 1. Inicializar o cliente de requisição

    Defina tanto RegionId quanto Endpoint. O RegionId especifica a região do OSS para armazenamento temporário de arquivos. A omissão do RegionId pode causar timeouts se o product e o OSS estiverem em regiões diferentes.

    import (
      "os"
    
      openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
      facebody20191230 "github.com/alibabacloud-go/facebody-20191230/v5/client"
      "github.com/alibabacloud-go/tea/tea"
    )
    
    func CreateClient() (_result *facebody20191230.Client, _err error) {
      config := &openapi.Config{
        // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set.
        AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
        // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set.
        AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
      }
      // The endpoint and regionId must be set to the same region.
      config.RegionId = tea.String("cn-shanghai")
      config.Endpoint = tea.String("facebody.cn-shanghai.aliyuncs.com")
      _result, _err = facebody20191230.NewClient(config)
      return _result, _err
    }
  2. Criar uma instância da struct AdvanceRequest

    Utilize a struct AdvanceRequest (denominada <NomeDaAPI>AdvanceRequest) para passar o stream do arquivo. O parâmetro de stream de arquivo possui o tipo io.Reader.

    // Replace with the file path.
    filePath := `<FILE_PATH>`
    // Open the file and create a stream.
    file, err := os.Open(filePath)
    if err != nil {
      return fmt.Errorf("Failed to open file: %v", err)
    }
    defer file.Close() // Close the file.
    // Create an AdvanceRequest struct instance.
    detectBodyCountAdvanceRequest := &facebody20191230.DetectBodyCountAdvanceRequest{
      ImageURLObject: file,
    }
  3. Enviar uma requisição

    Chame <NomeDaAPI>Advance com um ponteiro para a struct AdvanceRequest.

    // You need to add util "github.com/alibabacloud-go/tea-utils/v2/service" to the import.
    
    func _main() (response *facebody20191230.DetectBodyCountResponse, _err error) {
      client, _err := CreateClient()
      if _err != nil {
        return nil, _err
      }
    
      // Replace with the file path.
      filePath := `<FILE_PATH>`
      // Open the file and create a stream.
      file, err := os.Open(filePath)
      if err != nil {
        return nil, fmt.Errorf("Failed to open file: %v", err)
      }
      defer file.Close() // Close the file.
      // Create a request object.
      detectBodyCountAdvanceRequest := &facebody20191230.DetectBodyCountAdvanceRequest{
        ImageURLObject: file,
      }
      runtime := &util.RuntimeOptions{}
      // Send the request.
      response, _err = client.DetectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime)
    
      if _err != nil {
        return nil, _err
      }
      return response, nil
    }

Clique para visualizar o exemplo de código completo

package main

import (
  "fmt"
  "os"

  openapi "github.com/alibabacloud-go/darabonba-openapi/v2/client"
  facebody20191230 "github.com/alibabacloud-go/facebody-20191230/v5/client"
  util "github.com/alibabacloud-go/tea-utils/v2/service"
  "github.com/alibabacloud-go/tea/tea"
)

func CreateClient() (_result *facebody20191230.Client, _err error) {

  config := &openapi.Config{
    // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set.
    AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")),
    // Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set.
    AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")),
  }
  config.RegionId = tea.String("cn-shanghai")
  config.Endpoint = tea.String("facebody.cn-shanghai.aliyuncs.com")
  _result, _err = facebody20191230.NewClient(config)
  return _result, _err
}

func _main() (response *facebody20191230.DetectBodyCountResponse, _err error) {
  client, _err := CreateClient()
  if _err != nil {
    return nil, _err
  }

  // Replace with the file path.
  filePath := `<FILE_PATH>`
  // Open the file and create a stream.
  file, err := os.Open(filePath)
  if err != nil {
    return nil, fmt.Errorf("Failed to open file: %v", err)
  }
  defer file.Close() // Close the file.
  // Create a request object.
  detectBodyCountAdvanceRequest := &facebody20191230.DetectBodyCountAdvanceRequest{
    ImageURLObject: file,
  }
  runtime := &util.RuntimeOptions{}
  // Send the request.
  response, _err = client.DetectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime)

  if _err != nil {
    return nil, _err
  }
  return response, nil
}
func main() {
  response, err := _main()
  if err != nil {
    panic(err)
  }
  fmt.Println(response)
}

Perguntas frequentes

  1. A mensagem de erro "You are not authorized to perform this operation" é retornada ao chamar uma OpenAPI.

    Causa e solução

    Causa: O usuário do Resource Access Management (ram) associado ao seu AccessKey não possui as permissões necessárias para chamar a API.

    Solução: Conceda as permissões necessárias da OpenAPI ao usuário ram. Manage RAM user permissions.

    Por exemplo, se esse erro ocorrer ao chamar a API SendMessageToGlobe, crie uma política personalizada e atribua-a ao usuário ram:

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "dysms:SendMessageToGlobe",
          "Resource": "*"
        }
      ]
    }
  2. A mensagem de erro "SDKError: Message: Post "https://ecs-cn-XX.aliyuncs.com": dial tcp: lookup ecs-cn-XX.aliyuncs.com: no such host" é retornada ao chamar uma OpenAPI.

    Causa e solução

    Causa: O Endpoint especificado durante a inicialização do cliente não é compatível com a OpenAPI chamada.

    Solução: Modifique o Endpoint e tente novamente. Configure endpoints.

  3. A mensagem de erro "SDKError: StatusCode: 404 Code: InvalidAccessKeyId.NotFound Message: code: 404, Specified access key is not found." é retornada ao chamar uma OpenAPI.

    Causa e solução

    Causa: O AccessKey não foi passado corretamente.

    Solução: Verifique se o AccessKey foi transmitido corretamente durante a inicialização do cliente. os.Getenv("XXX") recupera o valor de XXX das variáveis de ambiente.

Outros erros comuns do SDK e suas soluções: FAQ.