Comprendre l'inadéquation de "time.Millisecond * int" dans Go
Dans les extraits de code fournis, les deux expressions impliquent l'opérateur de multiplication "*" et utilisez la valeur time.Millisecond. Cependant, il existe un écart entre le succès de compilation de ces expressions. Pour comprendre cela, examinons les principes fondamentaux de l'utilisation des opérateurs dans Go.
Go applique une vérification de type stricte pour les opérateurs, exigeant que les opérandes soient de types identiques. Si les opérandes diffèrent en type, à moins que l'opération n'implique des décalages ou des constantes non typées, le compilateur générera une erreur.
Dans le premier bloc de code, le premier opérande 1000 est un constante non typée. Lorsqu'une constante non typée est utilisée dans une opération impliquant uniquement des constantes, elle est implicitement convertie dans le type de l'autre opérande. Dans ce cas, time.Millisecond est de type time.Duration, ce qui entraîne une conversion réussie.
Dans le deuxième bloc de code, le premier opérande i est une variable de type int. Lorsqu'une variable et une constante non typée sont impliquées dans une opération, les règles de vérification de type ne permettent pas de conversion implicite. Par conséquent, le compilateur signale une erreur : opération invalide : i * time.Millisecond (types int et time.Duration incompatibles)
Pour résoudre ce problème, la variable i peut être explicitement convertie en time.Duration à l'aide de la fonction time.Duration(i), comme démontré dans le code suivant :
var i = 1000 time.Sleep(time.Duration(i) * time.Millisecond)
Cette conversion garantit que les opérandes sont du même type, satisfaisant les exigences de vérification de type de Go et permettant le code pour compiler avec succès.
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!