Maison >développement back-end >Golang >Comment dormir correctement pendant des fractions d'une durée en Go ?
Dormir par fractions d'une durée
Dans Go, dormir pendant une fraction d'une durée peut être obtenu en utilisant le temps.Sommeil (), qui prend un time.Duration comme argument. Cependant, lorsque l'on tente de spécifier une fraction de durée, on peut rencontrer des comportements différents en fonction de la structure du code.
Considérez ces deux scénarios :
// Case 1: Works s := time.Hour / 73.0 fmt.Println("sleeping: ", s) time.Sleep(s) // Case 2: Fails d := 73.0 s := time.Hour / d fmt.Println("sleeping: ", s) time.Sleep(s) // Error: time.Hour / d (mismatched types time.Duration and float64)
Dans le cas 1, le code réussit dort pendant une fraction d'heure, tandis que dans le cas 2, il échoue avec une erreur de non-concordance de type. Pour comprendre pourquoi, il est crucial de comprendre comment les constantes et les types sont gérés dans Go.
Comprendre les expressions constantes
Dans Go, les constantes sont fortement typées et peuvent être non typées (avec un type par défaut) ou explicitement typé.
Dans le cas 1, time.Hour est une constante typée de type temps.Durée. Lors de la division time.Hour par 73.0, Go convertit automatiquement la constante non typée 73.0 en time.Duration, ce qui donne l'expression time.Hour / time.Duration(73.0).
Inférence de types et de types incompatibles
Dans le cas 2, d est une constante non typée initialisée avec 73,0. Puisqu'un type est requis, Go déduit le type en fonction de la valeur constante, ce qui fait que d devient un float64.
Par la suite, en essayant de diviser le temps.Hour par d, qui est maintenant de type float64, Go détecte une inadéquation de type. La division du temps.Duration et float64 ne sont pas autorisés dans Go.
Résoudre l'incompatibilité de type
Pour résoudre l'incompatibilité de type, on peut explicitement convertir d en time.Duration avant d'effectuer la division :
s := time.Hour / time.Duration(d)
Alternativement, d peut être défini directement comme un temps.Durée variable :
d := time.Duration(73.0) s = time.Hour / d
Ou, en utilisant une conversion de type dans la déclaration de variable :
var d time.Duration = 73.0 s = time.Hour / d
Gestion des valeurs non représentables par time.Duration
Si le résultat de la division ne peut pas être représenté par time.Duration (par exemple, diviser une heure par 73,5), convertissez time.Hour en float64, effectuez la division, puis convertissez le résultat en temps.Durée :
d := 73.5 s := time.Duration(float64(time.Hour) / d)
En comprenant les règles de conversion de type et en gérant explicitement la conversion si nécessaire, on peut réussir à dormir pendant des fractions de durée dans Allez-y.
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!