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
Barbara Streisandoriginal
2024-12-30 06:05:09350parcourir

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)

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)

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)

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!

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