Les constantes (const) en Go sont calculées au moment de la compilation et peuvent avoir un type implicite. iota est un identifiant spécial utilisé pour générer des valeurs consécutives lors de la déclaration de blocs de constantes. iota est incrémenté de un à chaque nouvelle constante à l'intérieur d'un bloc.
L'affectation sans indication de type conduit à ce que la constante puisse obtenir un type différent de celui attendu par le développeur, surtout si elle participe à des opérations arithmétiques ou logiques. Cela peut entraîner des conversions implicites et des erreurs de compilation.
Exemple :
type Level int const ( Low Level = iota // Low: Level == 0 Medium // Medium: Level == 1 High // High: Level == 2 ) // Et si le type n'est pas spécifié : const ( Foo = iota // Foo: int == 0 Bar // Bar: int == 1 )
La valeur d'une constante utilisant iota peut-elle être "typée" et quel type aura-t-elle si le type n'est pas spécifié explicitement ?
Réponse : Si le type n'est pas spécifié explicitement, la constante devient de type non typée et obtient un type dérivé du contexte d'utilisation (par exemple, int, si elle est utilisée dans des opérations arithmétiques). Cela peut entraîner des problèmes lors de l'utilisation d'alias de types ou en cas de nécessité de typage strict.
Exemple:
type Status uint8 const ( Ready Status = iota+1 // Ok // si nous avions simplement déclaré const Ready = iota+1 — le type serait int, pas Status )
Histoire
Lors de la sérialisation du statut via json, le développeur a déclaré const avec iota sans type explicite. Le résultat — la sérialisation renvoie int, et non une chaîne lisible par un humain, ce qui a conduit le frontend à interpréter incorrectement la valeur reçue.
Histoire
Un type State (type State int) a été introduit dans le projet, mais les constantes sont restées déclarées sans type. Cela a conduit à ce que les interfaces ne pouvaient pas accepter des valeurs de type State, provoquant des bogues désagréables liés à l'incompatibilité de types lors de la comparaison de constantes et de variables.
Histoire
Un ingénieur a ajouté une nouvelle valeur d'énumération via iota, sans spécifier le type. En conséquence, le compilateur autorisait la comparaison de la constante avec n'importe quelle autre variable de type int, ce qui a conduit à des erreurs dans la logique métier lors de la mise en production.