Encontre respostas para as perguntas mais frequentes sobre a integração e o uso do Alibaba Cloud SDK for Go.
Pré-requisitos
Go 1.10.x ou posterior instalado.
Verifique se as APIs da Alibaba Cloud estão acessíveis na sua rede.
Visão geral
Problemas e soluções
Como lidar com erros de AccessKey?
A seguinte mensagem de erro será exibida caso o par de AccessKey não esteja configurado corretamente:
Alibaba Cloud SDK V2.0: InvalidCredentials: Please set up the credentials correctly. If you are setting them through environment variables, please ensure that ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set correctly.
Alibaba Cloud SDK V1.0: SDK.ServerError InvalidAccessKeyId.NotFound Specified access key is not found.
Soluções:
-
Execute os comandos abaixo para verificar se as variáveis de ambiente ALIBABA_CLOUD_ACCESS_KEY_ID e ALIBABA_CLOUD_ACCESS_KEY_SECRET estão configuradas.
Linux/macOS
echo $ALIBABA_CLOUD_ACCESS_KEY_ID echo $ALIBABA_CLOUD_ACCESS_KEY_SECRETWindows
echo %ALIBABA_CLOUD_ACCESS_KEY_ID% echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%Se um par de AccessKey válido for retornado, as variáveis de ambiente estarão configuradas corretamente. Caso nenhum par de AccessKey ou um par inválido seja retornado, configure as variáveis de ambiente conforme necessário. Para mais informações, consulte Configurar variáveis de ambiente no Linux, macOS e Windows.
-
Verifique se há erros relacionados ao par de AccessKey no código.
Exemplo de requisição com erro:
config := &openapi.Config{ AccessKeyId: tea.String(os.Getenv("yourAccessKeyID")), AccessKeySecret: tea.String(os.Getenv("yourAccessKeySecret")), }Exemplo de requisição bem-sucedida:
config := &openapi.Config{ AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")), AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")), }Notaos.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID") e os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET") recuperam o AccessKey ID e o AccessKey secret das variáveis de ambiente correspondentes.
ImportantePara evitar riscos de segurança, não codifique o par de AccessKey diretamente no seu código.
Quais códigos de erro são retornados quando os SDKs da Alibaba Cloud não conseguem se conectar aos serviços da Alibaba Cloud?
Um dos seguintes códigos de erro pode ser retornado:
InvalidAccessKeyId: Verifique se o seu AccessKey ID é válido.
SignatureDoesNotMatch: Verifique se o seu AccessKey secret é válido.
Verifique sua conexão de rede e certifique-se de que firewalls não estejam bloqueando as requisições.
O que fazer se a requisição de API expirar e o erro "*net.DNSError" ou "net.OpError" for relatado?
Tempos limite em requisições de API podem ter várias causas. A seguir estão as causas comuns e suas soluções:
Problemas de conexão de rede
Causa: A conexão de rede entre o cliente e o servidor está instável ou falhou, impedindo que a requisição chegue ao servidor.
Soluções:
Execute o comando ping ou curl para testar a conectividade entre o host local e o endpoint do serviço de nuvem. Por exemplo, execute o comando ping dysmsapi.aliyuncs.com ou curl -v https://dysmsapi.aliyuncs.com para testar a conectividade entre o seu host local e o endpoint da API do Short Message Service (SMS).
Se o comando expirar ou não receber resposta, verifique se existem políticas de bloqueio no firewall local ou nos roteadores.
-
Caso receba uma resposta, especifique um período de tempo limite adequado para evitar falhas de requisição causadas por configurações incorretas. Para mais informações, consulte Configurar um período de tempo limite. Código de exemplo:
// Create a RuntimeOptions instance and specify runtime parameters. runtime := &util.RuntimeOptions{} // Configure a timeout period for connection requests. Unit: milliseconds. runtime.ConnectTimeout = tea.Int(10000) // Set the timeout period for connection requests to 10 seconds.
Tempo prolongado de processamento da requisição de API
Causa: O tempo de processamento da requisição de API excede o período de tempo limite de leitura especificado.
Solução: Aumente o período de tempo limite de leitura. Para mais informações, consulte Configurar um período de tempo limite. Código de exemplo:
// Create a RuntimeOptions instance and specify runtime parameters.
runtime := &util.RuntimeOptions{}
// Configure a timeout period for read requests. Unit: milliseconds.
runtime.ReadTimeout = tea.Int(10000) // Set the timeout period for read requests to 10 seconds.
O que fazer se a compilação falhar ou a mensagem de erro "missing go.sum entry" for retornada devido a conflitos de versão entre bibliotecas de dependência?
Esse erro ocorre porque uma dependência necessária está ausente no arquivo go.sum. O arquivo go.mod gerencia as dependências do projeto. Certifique-se de que não existam conflitos de versão de dependências no go.mod e execute o comando a seguir para atualizar as dependências e sincronizar os arquivos go.mod e go.sum:
go mod tidy
Como usar um SDK for Go em um projeto existente?
Abra o VS Code. Na barra de navegação superior, escolha File > Open Folder. Crie e selecione uma pasta de projeto ou selecione uma pasta existente. Neste exemplo, uma pasta chamada gosdkproject é criada e selecionada.
Na barra de navegação superior, escolha Terminal > New Terminal. A janela TERMINAL aparecerá na parte inferior do console. Execute o comando
go mod init gosdkprojectsna janela TERMINAL para inicializar o projeto Go. Após a inicialização, um arquivo go.mod será gerado no diretório atual do projeto. Esse arquivo de módulo gerencia as dependências e as informações de versão do projeto.
Acesse o SDK Center e selecione o produto de nuvem para o qual deseja usar o SDK. Defina SDK version como V2.0 e a linguagem como Go. Copie o comando de instalação, cole-o no terminal e pressione Enter para executá-lo.
O que fazer se o erro "MissingRequiredParameter" for relatado ao chamar uma operação de API?
O exemplo a seguir utiliza a operação SendSms do Short Message Service (SMS).
Acesse a página de API Debugging no OpenAPI Developer Portal e selecione o produto de nuvem e a operação de API.
Verifique se os parâmetros obrigatórios, como PhoneNumbers e SignName, foram especificados no objeto de requisição construído. Neste exemplo, o objeto de requisição é
SendSmsRequest.Confirme se todos os parâmetros obrigatórios estão especificados de acordo com a referência da API.
Certifique-se de que os valores dos parâmetros obrigatórios sejam válidos. Por exemplo, verifique se os números de celular estão em formatos válidos.
O SDK valida automaticamente os parâmetros antes de enviar uma requisição de API. Se um parâmetro obrigatório estiver ausente, um erro como
MissingRequiredParameterserá relatado. Por exemplo, se o parâmetro phone_numbers não for especificado, o erro "MissingPhoneNumbers: code: 400" será exibido. Especifique o parâmetro ausente com base na mensagem de erro.
sendSmsRequest := &dysmsapi20170525.SendSmsRequest{
// The code of the SMS template.
TemplateCode: tea.String("<YOUR_VALUE>"),
// The variables of the SMS template. Example: {\"code\":\"1234\"}.
TemplateParam: tea.String("{\"code\":\"1234\"}"),
// The mobile numbers to which you want to send a text message.
PhoneNumbers: tea.String("<YOUR_VALUE>"),
// The name of the SMS signature.
SignName: tea.String("<YOUR_VALUE>"),
}
O que fazer se a chamada de uma operação de API falhar porque a região especificada não oferece suporte à operação e a mensagem "404 Not Found" for retornada?
Certifique-se de que a região selecionada ofereça suporte ao serviço que você está chamando. Por exemplo, para o Short Message Service (SMS), encontre o endpoint na página do produto no OpenAPI Developer Portal.
Na página do produto, na seção Service Area List, verifique as colunas region ID e endpoint para confirmar o endpoint da sua região de destino. Por exemplo, para o Short Message Service (SMS) (versão da API 2017-05-25), o endpoint para a maioria das regiões é dysmsapi.aliyuncs.com.
Pergunta 8: O que fazer se a mensagem "go: go.mod file not found in current directory or any parent directory." for retornada ao executar o comando go get?
Essa mensagem indica que não existe nenhum arquivo go.mod no diretório atual ou em qualquer diretório pai. O arquivo go.mod gerencia as dependências e versões do projeto. Execute o comando a seguir para inicializar o arquivo go.mod:
# Initialize a new go.mod file in the current directory and define module names. In most cases, a module name is the URL path to a repository. In this example, the domain name is example.com and the project name is goproject.
go mod init example.com/goproject
Lista de verificação de exceções básicas do Go
|
Mensagem de erro |
Causa |
Solução |
|
Nil pointer dereference |
Um ponteiro nulo foi desreferenciado ou um método foi chamado em um ponteiro nulo. |
Antes de usar o ponteiro, certifique-se de que ele não seja nil. Utilize uma instrução condicional ou um mecanismo de tratamento de erros para verificar se o ponteiro é nil. |
|
Invalid memory address or nil pointer dereference |
Um endereço de memória inválido foi acessado ou um ponteiro nulo foi desreferenciado. |
Antes de acessar o endereço de memória, verifique se ele é válido e se a memória foi alocada para esse endereço. Utilize uma instrução condicional ou um mecanismo de tratamento de erros para validar o endereço de memória. |
|
Timeouts and cancelations |
Uma requisição de rede ou operação expirou ou foi cancelada. |
Antes de enviar uma requisição de rede ou realizar uma operação demorada, configure um período de tempo limite apropriado e cancele a requisição ou operação conforme as necessidades do seu negócio. Utilize o pacote context para gerenciar o período de tempo limite e as operações de cancelamento. |
Suporte técnico
Se as perguntas frequentes acima não resolverem seu problema, entre em contato com o suporte técnico da Alibaba Cloud:
Envie um ticket: Enviar um ticket no site da Alibaba Cloud.
Se tiver dúvidas ou feedback, entre em contato com o suporte técnico da Alibaba Cloud no grupo do DingTalk (ID: 60965016010).