Maison > Article > développement back-end > Pourquoi mon code Go rencontre-t-il une erreur de débordement lors de l'utilisation de constantes ?
Débordements de constantes en cascade dans Go
Lorsque vous travaillez avec des constantes dans Go, il est important de comprendre leurs conversions de type pour éviter les débordements potentiels. Considérez l'extrait de code suivant :
<code class="go">const ( userid = 12345 did = (userid &^ (0xFFFF << 48)) )</code>
La compilation de ce code entraîne l'erreur suivante :
constant -18446462598732840961 overflows int
Pour résoudre ce problème, nous devons approfondir les conversions de type sous-jacentes effectuées par Go. avec des constantes.
Comprendre les constantes non typées et la conversion de type
Dans le code ci-dessus, la constante 0xFFFF << 48 est une constante non typée, ce qui signifie qu’aucun type spécifique ne lui est attribué. Lors de la combinaison de constantes non typées avec des valeurs typées, la constante non typée prend le type de l'autre opérande.
Dans notre cas, nous effectuons une opération ET (&) entre l'ID utilisateur de la constante typée (qui est un int ) et la constante non typée 0xFFFF << 48. Par conséquent, l'expression résultante (userid &^ (0xFFFF << 48)) devient un int.
Débordement de constantes entières
Le problème se pose lorsque nous annuler la constante non typée 0xFFFF << 48, ce qui donne -0xffff000000000001. Étant donné que cette valeur est trop grande pour un type int (qui est signé et a une plage de -2^31 à 2^31-1), elle provoque l'erreur de compilation.
Utilisation d'Int64 pour la portabilité.
Pour éviter ce problème, nous pouvons utiliser un type entier plus grand, tel que int64, qui a une plage plus élevée et peut accepter des valeurs constantes plus grandes.
<code class="go">const ( userid int64 = 12345 did = (userid &^ (0xFFFF << 48)) )</code>
Ce changement permet nous pouvons représenter et manipuler des constantes dans les contraintes des types entiers disponibles sans rencontrer de débordements.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!