Dans Go, vous pouvez rencontrer différents comportements lorsque vous tentez d'effectuer des opérations sur des durées, des flottants et des constantes non typées. Voici un examen plus approfondi de deux lignes de code similaires et pourquoi l'une fonctionne mais l'autre pas.
L'expression time.Hour / 73.0 est une courte déclaration de variable. L'expression de droite est une division entre un time.Duration (valeur constante pour une heure) et une constante numérique non typée (73.0).
Puisque time.Duration est un type entier (int64), le non typé la constante est convertie en temps.Durée (sans perte de précision). Par conséquent, la division donnera lieu à une valeur time.Duration, qui peut être utilisée pour dormir pendant la fraction d'heure spécifiée.
En revanche , l'expression time.Hour / d échoue car d n'est pas du bon type.
Dans la première ligne, d est déclaré comme float64 en raison du type déduit du constante non typée 73,0. Cependant, lorsque vous essayez de diviser time.Hour (un time.Duration) par d (un float64), Go génère une erreur d'incompatibilité de type car vous ne pouvez pas opérer directement sur différents types.
Pour faire fonctionner cette ligne, vous devez convertir d en time.Duration. Il existe plusieurs façons de procéder :
Alternativement, vous pouvez convertir time.Hour en float64, effectuer la division et reconvertir le résultat en time.Duration :
d := 73.5 s := time.Duration(float64(time.Hour) / d)
Les constantes non typées peuvent prendre différentes types en fonction du contexte dans lequel ils sont utilisés. Dans ce cas, la constante non typée 73.0 prend le type float64 car elle est utilisée dans une expression où elle est affectée à la variable float64 d. Cependant, dans l'expression time.Hour / 73.0, la constante est convertie en time.Duration car elle est utilisée dans une opération avec une valeur time.Duration.
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!