« J’ai perdu une heure, et la solution tient en trois lignes » : comment convertir int en string en Go
\n\nImaginez : vous développez un microservice en Go, vous traitez des identifiants numériques d’utilisateurs et vous réalisez soudain que vous devez les concaténer avec du texte dans des logs ou une réponse HTTP. Vous écrivez quelque chose comme str := "User_" + id — et le compilateur affiche une erreur : cannot use id (type int) as type string in concatenation. Cela vous dit quelque chose ?
C’est l’une des questions les plus populaires sur Stack Overflow concernant Go — « How to convert an int value to string in Go? » — elle a été consultée des centaines de milliers de fois. Et pour cause : en Go, le typage est strict, et on ne peut pas simplement « additionner » un nombre avec une chaîne. Mais ne vous inquiétez pas — aujourd’hui, nous allons passer en revue toutes les méthodes de conversion de int en string en Go. Vous découvrirez quelle méthode est la plus rapide, laquelle est la plus sûre, et quand les utiliser. C’est parti !
Pourquoi Go n’autorise-t-il pas simplement l’addition d’un int et d’une string ?
\n\nContrairement à JavaScript ou Python, où "Age: " + 25 fonctionne « nativement », Go exige une conversion de type explicite. Cela a été fait pour des raisons de sécurité : vous devez toujours contrôler ce qui est converti en quoi. Imaginez que vous additionniez accidentellement un nombre avec du texte — dans d’autres langages, cela pourrait entraîner des bugs difficiles à détecter. En Go, le compilateur vous dit immédiatement : « Stop, ce n’est pas autorisé ».
C’est pourquoi, pour convertir un int en string en Go, il existe des fonctions spéciales dans la bibliothèque standard. Aucune dépendance externe — seulement du Go pur.
Méthode n°1 : fmt.Sprintf — le « couteau suisse » universel
\n\nLa méthode la plus intuitive consiste à utiliser la fonction fmt.Sprintf. Vous la connaissez probablement déjà grâce à l’affichage formaté. Elle peut convertir n’importe quoi en chaîne — nombres, booléens, structures.
package main\n\nimport "fmt"\n\nfunc main() {\n age := 25\n str := fmt.Sprintf("Age: %d", age)\n fmt.Println(str) // Affiche : Age: 25\n}\n\nAvantages :
\n- \n
- Très flexible : permet d’intégrer directement un nombre dans une chaîne avec le format souhaité (décimal, hexadécimal, avec des zéros non significatifs). \n
- Convient à tous les types — non seulement int, mais aussi float, bool, struct. \n
Inconvénients :
\n- \n
- Utilise la réflexion en interne, donc plus lent que les fonctions spécialisées. \n
- Si vous avez simplement besoin d’obtenir une chaîne à partir d’un nombre (sans formatage), c’est excessif. \n
Quand l’utiliser : lorsque vous devez non seulement convertir, mais aussi formater la sortie — ajouter des symboles monétaires, aligner sur une largeur, convertir en HEX.
\n\nMéthode n°2 : strconv.Itoa — rapide et simple (int → string)
\n\nSi votre objectif est simplement d’obtenir la représentation textuelle d’un nombre, sans aucun « fioriture », utilisez strconv.Itoa. C’est une fonction spécialisée pour la conversion de int en string. Elle est rapide et n’effectue pas d’opérations superflues.
package main\n\nimport (\n "fmt"\n "strconv"\n)\n\nfunc main() {\n number := 42\n str := strconv.Itoa(number)\n fmt.Println(str) // Affiche : "42"\n fmt.Printf("Type : %T\\n", str) // Type : string\n}\n\nAvantages :
\n- \n
- Performances maximales pour le cas de base. \n
- Simplicité : une fonction — une action. \n
Inconvénients :
\n- \n
- Fonctionne uniquement avec le type
int. Si vous avezint64,int32, etc., vous devez d’abord le convertir enintou utiliser une autre méthode. \n - Pas de contrôle sur la base numérique — uniquement la représentation décimale. \n
Quand l’utiliser : lorsque vous avez un int standard et que vous avez simplement besoin d’obtenir une chaîne — c’est votre choix par défaut.
Méthode n°3 : strconv.FormatInt — contrôle de la base numérique
\n\nEt si vous devez convertir un nombre en