Maison >développement back-end >Golang >Pourquoi « time.Hour / 73.0 » fonctionne-t-il dans Go, mais « time.Hour / d » échoue-t-il ?

Pourquoi « time.Hour / 73.0 » fonctionne-t-il dans Go, mais « time.Hour / d » échoue-t-il ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-04 18:01:16287parcourir

Why Does `time.Hour / 73.0` Work in Go, But `time.Hour / d` Fail?

Conversion de la durée en flottant et inversement

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.

La ligne de travail : time.Hour / 73.0

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.

La ligne défaillante : time.Hour / d

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.

Faire fonctionner :

Pour faire fonctionner cette ligne, vous devez convertir d en time.Duration. Il existe plusieurs façons de procéder :

  • Conversion explicite : s := time.Hour / time.Duration(d)
  • Casting de type : s := time.Hour / time.Duration(d)
  • Durée Devoir : d := time.Duration(73.0)

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)

Comprendre les constantes non typées :

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn