Maison > développement back-end > Golang > Pourquoi « time.Millisecond * int » ne parvient-il pas à se compiler dans Go, mais « time.Millisecond * 1000 » réussit-il ?

Pourquoi « time.Millisecond * int » ne parvient-il pas à se compiler dans Go, mais « time.Millisecond * 1000 » réussit-il ?

Susan Sarandon
Libérer: 2024-11-11 14:40:03
original
188 Les gens l'ont consulté

Why Does

Comprendre l'inadéquation de "time.Millisecond * int" dans Go

Dans les extraits de code fournis, les deux expressions impliquent l'opérateur de multiplication "*" et utilisez la valeur time.Millisecond. Cependant, il existe un écart entre le succès de compilation de ces expressions. Pour comprendre cela, examinons les principes fondamentaux de l'utilisation des opérateurs dans Go.

Vérification du type d'opérateur

Go applique une vérification de type stricte pour les opérateurs, exigeant que les opérandes soient de types identiques. Si les opérandes diffèrent en type, à moins que l'opération n'implique des décalages ou des constantes non typées, le compilateur générera une erreur.

Exception pour les constantes non typées

Dans le premier bloc de code, le premier opérande 1000 est un constante non typée. Lorsqu'une constante non typée est utilisée dans une opération impliquant uniquement des constantes, elle est implicitement convertie dans le type de l'autre opérande. Dans ce cas, time.Millisecond est de type time.Duration, ce qui entraîne une conversion réussie.

Inadéquation des variables et des constantes non typées

Dans le deuxième bloc de code, le premier opérande i est une variable de type int. Lorsqu'une variable et une constante non typée sont impliquées dans une opération, les règles de vérification de type ne permettent pas de conversion implicite. Par conséquent, le compilateur signale une erreur : opération invalide : i * time.Millisecond (types int et time.Duration incompatibles)

Résolution

Pour résoudre ce problème, la variable i peut être explicitement convertie en time.Duration à l'aide de la fonction time.Duration(i), comme démontré dans le code suivant :

var i = 1000
time.Sleep(time.Duration(i) * time.Millisecond)
Copier après la connexion

Cette conversion garantit que les opérandes sont du même type, satisfaisant les exigences de vérification de type de Go et permettant le code pour compiler avec succès.

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