Retrouvez les réponses aux questions fréquemment posées sur l'intégration et l'utilisation du SDK Alibaba Cloud pour Go.
Prérequis
Go 1.10.x ou version ultérieure est installé.
Assurez-vous que les API Alibaba Cloud sont accessibles via votre réseau.
Vue d'ensemble
Problèmes et solutions
Comment gérer les erreurs liées à l'AccessKey ?
Le message d'erreur suivant s'affiche lorsque la paire d'AccessKey n'est pas configurée correctement :
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.
Solutions :
-
Exécutez les commandes suivantes pour vérifier la configuration des variables d'environnement ALIBABA_CLOUD_ACCESS_KEY_ID et ALIBABA_CLOUD_ACCESS_KEY_SECRET.
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%Si une paire d'AccessKey valide s'affiche, les variables d'environnement sont correctement configurées. Si aucune paire d'AccessKey ou une paire invalide s'affiche, configurez les variables d'environnement selon vos besoins. Pour plus d'informations, consultez Configurer les variables d'environnement sous Linux, macOS et Windows.
-
Vérifiez les erreurs liées à la paire d'AccessKey dans le code.
Exemple de requête erronée :
config := &openapi.Config{ AccessKeyId: tea.String(os.Getenv("yourAccessKeyID")), AccessKeySecret: tea.String(os.Getenv("yourAccessKeySecret")), }Exemple de requête correcte :
config := &openapi.Config{ AccessKeyId: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")), AccessKeySecret: tea.String(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")), }Remarqueos.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID") et os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET") récupèrent l'AccessKey ID et l'AccessKey secret depuis les variables d'environnement correspondantes.
ImportantPour éviter tout risque de sécurité, ne codez pas en dur la paire d'AccessKey dans votre code.
Quels codes d'erreur sont renvoyés lorsque les SDK Alibaba Cloud ne parviennent pas à se connecter aux services Alibaba Cloud ?
L'un des codes d'erreur suivants peut être renvoyé :
InvalidAccessKeyId : Vérifiez la validité de votre AccessKey ID.
SignatureDoesNotMatch : Vérifiez la validité de votre AccessKey secret.
Vérifiez votre connexion réseau et assurez-vous que les pare-feu ne bloquent pas les requêtes.
Que faire si la requête API expire et que l'erreur « *net.DNSError » ou « net.OpError » s'affiche ?
Les délais d'expiration des requêtes API peuvent avoir plusieurs causes. Voici les causes les plus fréquentes et leurs solutions :
Problèmes de connexion réseau
Cause : La connexion réseau entre le client et le serveur est instable ou a échoué, empêchant la requête d'atteindre le serveur.
Solutions :
Exécutez la commande ping ou curl pour tester la connectivité entre l'hôte local et l'endpoint du service cloud. Par exemple, exécutez la commande ping dysmsapi.aliyuncs.com ou curl -v https://dysmsapi.aliyuncs.com pour tester la connectivité entre votre hôte local et l'endpoint de l'API Short Message Service (SMS).
Si la commande expire ou ne reçoit aucune réponse, vérifiez les règles de blocage sur votre pare-feu local ou vos routeurs.
-
Si une réponse est renvoyée, spécifiez un délai d'expiration approprié afin d'éviter les échecs de requête dus à une temporisation inadéquate. Pour plus d'informations, consultez Configurer un délai d'expiration. Exemple de code :
// 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.
Temps de traitement long de la requête API
Cause : Le temps de traitement de la requête API dépasse le délai de lecture spécifié.
Solution : Augmentez le délai de lecture. Pour plus d'informations, consultez Configurer un délai d'expiration. Exemple de code :
// 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.
Que faire si la compilation échoue ou si le message d'erreur « missing go.sum entry » apparaît en raison de conflits de versions entre bibliothèques ?
Cette erreur survient lorsqu'une dépendance requise est absente du fichier go.sum. Le fichier go.mod gère les dépendances du projet. Assurez-vous qu'il n'y a aucun conflit de versions dans go.mod, puis exécutez la commande suivante pour mettre à jour les dépendances et synchroniser les fichiers go.mod et go.sum :
go mod tidy
Comment utiliser un SDK pour Go dans un projet existant ?
Ouvrez VS Code. Dans la barre de navigation supérieure, choisissez File > Open Folder. Créez et sélectionnez un dossier de projet, ou sélectionnez un dossier existant. Dans cet exemple, un dossier nommé gosdkproject est créé et sélectionné.
Dans la barre de navigation supérieure, choisissez Terminal > New Terminal. La fenêtre TERMINAL s'affiche dans la partie inférieure de la console. Exécutez la commande
go mod init gosdkprojectsdans la fenêtre TERMINAL pour initialiser le projet Go. Une fois le projet initialisé, un fichier go.mod est généré dans le répertoire actuel. Ce fichier de module sert à gérer les dépendances et les informations de version du projet.
Accédez au SDK Center et sélectionnez le produit cloud pour lequel vous souhaitez utiliser le SDK. Définissez SDK version sur V2.0 et choisissez Go comme langage. Copiez la commande d'installation, collez-la dans le terminal, puis appuyez sur Entrée pour l'exécuter.
Que faire si l'erreur « MissingRequiredParameter » s'affiche lors de l'appel d'une opération API ?
L'exemple suivant utilise l'opération SendSms du service Short Message Service (SMS).
Accédez à la page API Debugging du portail développeur OpenAPI, puis sélectionnez le produit cloud et l'opération API.
Vérifiez que les paramètres requis tels que PhoneNumbers et SignName sont bien spécifiés dans l'objet de requête construit. Dans cet exemple, l'objet de requête est
SendSmsRequest.Confirmez que tous les paramètres obligatoires sont renseignés conformément à la référence API.
Assurez-vous que les valeurs des paramètres requis sont valides. Par exemple, vérifiez que les numéros de téléphone mobile respectent les formats attendus.
Le SDK valide automatiquement les paramètres avant d'envoyer une requête API. Si un paramètre obligatoire est manquant, une erreur telle que
MissingRequiredParameters'affiche. Par exemple, si le paramètre phone_numbers n'est pas spécifié, l'erreur « MissingPhoneNumbers: code: 400 » s'affiche. Renseignez le paramètre manquant en suivant le message d'erreur.
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>"),
}
Que faire si l'appel d'une opération API échoue car celle-ci n'est pas prise en charge dans la région spécifiée et que le message « 404 Not Found » est renvoyé ?
Assurez-vous que la région sélectionnée prend en charge le service appelé. Par exemple, pour le Short Message Service (SMS), vous trouverez l'endpoint sur sa page produit dans le portail développeur OpenAPI.
Sur la page du produit, dans la section Service Area List, consultez les colonnes region ID et endpoint pour confirmer l'endpoint correspondant à votre région cible. Par exemple, pour le Short Message Service (SMS) (version API 2017-05-25), l'endpoint pour la plupart des régions est dysmsapi.aliyuncs.com.
Question 8 : Que faire si le message « go: go.mod file not found in current directory or any parent directory. » s'affiche lors de l'exécution de la commande go get ?
Ce message indique qu'aucun fichier go.mod n'existe dans le répertoire actuel ou ses répertoires parents. Le fichier go.mod gère les dépendances et les versions du projet. Exécutez la commande suivante pour initialiser le fichier 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
Liste de contrôle des exceptions Go courantes
|
Message d'erreur |
Cause |
Solution |
|
Nil pointer dereference |
Déréférencement d'un pointeur nul ou appel d'une méthode sur un pointeur nul. |
Avant d'utiliser le pointeur, assurez-vous qu'il n'est pas nil. Recourez à une instruction conditionnelle ou à un mécanisme de gestion des erreurs pour vérifier si le pointeur est nil. |
|
Invalid memory address or nil pointer dereference |
Accès à une adresse mémoire invalide ou déréférencement d'un pointeur nul. |
Avant d'accéder à l'adresse mémoire, vérifiez sa validité et assurez-vous que de la mémoire lui est allouée. Utilisez une instruction conditionnelle ou un mécanisme de gestion des erreurs pour valider l'adresse mémoire. |
|
Timeouts and cancelations |
Expiration ou annulation d'une requête réseau ou d'une opération. |
Avant d'envoyer une requête réseau ou d'effectuer une opération longue, configurez un délai d'expiration approprié et prévoyez l'annulation de la requête ou de l'opération selon vos besoins métier. Le package context permet de gérer le délai d'expiration et les opérations d'annulation. |
Support technique
Si cette FAQ ne résout pas votre problème, contactez le support technique Alibaba Cloud :
Soumettez un ticket : Soumettre un ticket sur le site Web Alibaba Cloud.
Pour toute question ou retour d'expérience, contactez le support technique Alibaba Cloud via le groupe DingTalk (ID : 60965016010).