Maison > développement back-end > Golang > Les arguments entiers avec des zéros non significatifs sont analysés comme octaux par flag.IntVar ou flag.Int

Les arguments entiers avec des zéros non significatifs sont analysés comme octaux par flag.IntVar ou flag.Int

王林
Libérer: 2024-02-08 21:10:08
avant
634 Les gens l'ont consulté

带有前导零的整数参数由 flag.IntVar 或 flag.Int 解析为八进制

L'éditeur php Yuzai a introduit : Dans le langage Go, les paramètres de ligne de commande peuvent être analysés via le package flag. Lorsque nous utilisons flag.IntVar ou flag.Int pour analyser un paramètre entier avec des zéros non significatifs, ils l'analysent en octal. Cela signifie que si nous entrons un argument entier commençant par 0 sur la ligne de commande, il sera analysé comme un nombre octal et non comme un nombre décimal. C'est quelque chose à noter car parfois nous souhaitons traiter les arguments sous forme de nombres décimaux au lieu de nombres octaux. Par conséquent, lors de l’utilisation du package flag pour analyser les paramètres, une attention particulière doit être accordée à la manière dont les paramètres entiers avec des zéros non significatifs sont analysés.

Contenu de la question


J'ai écrit ce code :

package main

import "fmt"
import "flag"

func main() {
    
    var i int
    
    flag.intvar(&i, "i", 0, "help")
    flag.parse()

    if i < 9 {
        fmt.println("i < 9")
    }

    fmt.println(i)
}
Copier après la connexion

Quand j'exécute cette commande :

./a -i 10
10
Copier après la connexion

Le résultat est correct.

Mais pourquoi si j'utilise 010 运行它,golang 会将 010 解析为八进制(010 == 8) ?

./a -i 010
i < 9
8
Copier après la connexion

Est-ce un bug ?


Solution


Oh, c'est un terrible piège.

Est-ce un bug ?

Il a été ajouté intentionnellement avant Go 1.0.0 en 2011. p> Indicateurs : permet la saisie d'indicateurs entiers hexadécimaux et octaux.

Vous pouvez trouver le comportement complet dans la documentation de

strconv.ParseInt, plutôt que son utilisation dans son flag qui est documenté. strconv.ParseInt 的文档中找到完整的行为,而不是它的flag

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!

Étiquettes associées:
source:stackoverflow.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal