"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pourquoi GO's `Time.Sleep ()` gère-t-il les durées fractionnées différemment en fonction de type constant?

Pourquoi GO's `Time.Sleep ()` gère-t-il les durées fractionnées différemment en fonction de type constant?

Publié le 2025-03-23
Parcourir:960

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

fraction de temps de sommeil durée dans go

question:

Pourquoi le code suivant dort-il avec succès pour une durée de fraction S: = temps.hour / 73.0 fmt.println ("Sleeping:", s) Temps. // Échec D: = 73.0 S: = temps.hour / d fmt.println ("Sleeping:", s) Temps. // Erreur: opération non valide: Time.hour / D (Types non correspondants Time.Duration et Float64)

// 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:

Success:
    73.0 adapts à Time.Duration dans le temps d'expression.hour / 73.0.
  • défaillance:
  • d est explicitement typé en float64, qui ne peut pas être divisé par le temps. Time.Duration (d)
  • ou utilisez l'une des alternatives suivantes:
d: = time.Duration (73.0)

var d Time.Duration = 73.0
// 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)

pour les valeurs qui ne peuvent pas être représentées dans le temps.Duration, tel que 73.5, le temps. à float64:

    d: = 73.5 S: = Time.Duration (float64 (time.hour) / d)
  • Considérations supplémentaires:

d := 73.5
s := time.Duration(float64(time.Hour) / d)
Constantes comme Time.hour ont un type qui ne peut pas être modifié, donc ils ne peuvent pas être utilisés directement avec non-compatible Types.

Constantes non typées:

Les constantes non typées prennent le type du contexte dans lequel ils sont utilisés. Dans la première ligne, 73.0 s'adapte à la conversion de Time.Duration. types.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3