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
Susan Sarandonoriginal
2024-11-11 14:40:03185parcourir

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)

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!

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