Dans Go, les types time.Time et time.Duration sont répandus pour travailler avec des opérations liées au temps. Cependant, il pourrait y avoir une certaine confusion lorsqu'il s'agit de multiplication d'entiers et de ces types.
Le code suivant illustre cette confusion :
//works time.Sleep(1000 * time.Millisecond) //fails var i = 1000 time.Sleep(i * time.Millisecond)
Le deuxième bloc de code ne parvient pas à se compiler en raison d'une incompatibilité de type. . Bien que les deux milliers dans le code semblent être des nombres entiers, ce n'est pas le cas.
Dans Go, les opérateurs nécessitent des opérandes du même type, à l'exception des opérateurs impliquant des décalages ou des constantes non typées. Pour notre cas, nous avons la multiplication, ce qui signifie que les opérandes doivent être identiques.
Dans la première ligne, 1000 est une constante non typée. Lorsqu'il est utilisé dans une opération, il est automatiquement converti dans le type de l'autre opérande, qui dans ce cas est time.Duration. Cependant, dans la deuxième ligne, i est une variable déclarée de type int, ce qui entraîne une incompatibilité de type.
Pour résoudre ce problème, nous devons convertir i en time.Duration avant d'effectuer la multiplication. Voici un exemple :
var i = 1000 time.Sleep(time.Duration(i) * time.Millisecond)
En convertissant i en time.Duration, la multiplication et l'heure suivante.L'appel de sommeil réussira désormais.
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!