Maison > développement back-end > Golang > Pourquoi « time.Sleep() » de Go gère-t-il les durées fractionnaires différemment en fonction du type constant ?

Pourquoi « time.Sleep() » de Go gère-t-il les durées fractionnaires différemment en fonction du type constant ?

Barbara Streisand
Libérer: 2024-12-30 06:05:09
original
334 Les gens l'ont consulté

Why Does Go's `time.Sleep()` Handle Fractional Durations Differently Based on Constant Type?

Fraction de la durée du sommeil en Go

Question :

Pourquoi les éléments suivants Go le code réussit à dormir pendant une durée fractionnée, tandis que le second échoue ?

// Success
s := time.Hour / 73.0
fmt.Println("sleeping: ", s)
time.Sleep(s)

// Failure
d := 73.0
s := time.Hour / d
fmt.Println("sleeping: ", s)
time.Sleep(s)

// Error: invalid operation: time.Hour / d (mismatched types time.Duration and float64)
Copier après la connexion

Réponse :

La différence réside dans le type de diviseur dans chaque ligne :

  • Succès : 73.0 est une constante numérique non typée, qui s'adapte au temps.Durée dans l'expression temps.Heure / 73.0.
  • Échec : d est explicitement tapé comme float64, qui ne peut pas être divisé par time.Duration.

Pour faire fonctionner la deuxième ligne, vous doit convertir d en time.Duration :

s := time.Hour / time.Duration(d)
Copier après la connexion

ou utiliser l'une des alternatives suivantes manières :

  • d := time.Duration(73.0)
  • var d time.Duration = 73.0

Pour les valeurs qui ne peuvent pas être représentées dans le temps .Durée, telle que 73,5, l'heure. L'heure doit être convertie en float64 :

d := 73.5
s := time.Duration(float64(time.Hour) / d)
Copier après la connexion

Considérations supplémentaires :

  • Constantes : Les constantes comme time.Hour ont un type qui ne peut pas être modifié, ils ne peuvent donc pas être utilisés directement avec des types non compatibles.
  • Non typé Constantes : Les constantes non typées prennent le type du contexte dans lequel elles sont utilisées. Dans la première ligne, 73.0 s'adapte au temps.Durée.
  • Conversion de type : Conversions de type explicites comme time.Duration(d) sont nécessaires pour assurer la compatibilité entre les différents types.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal