Heim >Backend-Entwicklung >Golang >Ganzzahlige Argumente mit führenden Nullen werden von flag.IntVar oder flag.Int als Oktalargumente analysiert

Ganzzahlige Argumente mit führenden Nullen werden von flag.IntVar oder flag.Int als Oktalargumente analysiert

王林
王林nach vorne
2024-02-08 21:10:08627Durchsuche

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

php-Editor Yuzai eingeführt: In der Go-Sprache können Befehlszeilenparameter über das Flag-Paket analysiert werden. Wenn wir flag.IntVar oder flag.Int verwenden, um ein ganzzahliges Argument mit führenden Nullen zu analysieren, wird es als Oktal analysiert. Das heißt, wenn wir in der Befehlszeile ein ganzzahliges Argument eingeben, das mit 0 beginnt, wird es als Oktalzahl und nicht als Dezimalzahl geparst. Dies ist zu beachten, da wir Argumente manchmal als Dezimalzahlen statt als Oktalzahlen behandeln möchten. Daher muss bei der Verwendung des Flag-Pakets zum Parsen von Parametern besonders darauf geachtet werden, wie ganzzahlige Parameter mit führenden Nullen analysiert werden.

Frageninhalt


Ich habe diesen Code geschrieben:

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)
}

Wenn ich diesen Befehl ausführe:

./a -i 10
10

Die Ausgabe ist korrekt.

Aber warum, wenn ich 010 运行它,golang 会将 010 解析为八进制(010 == 8 verwende)?

./a -i 010
i < 9
8

Ist das ein Fehler?


Lösung


Oh, das ist eine schreckliche Falle.

Ist das ein Fehler?

Es wurde absichtlich vor Go 1.0.0 im Jahr 2011 hinzugefügt. p> Flags: Ermöglicht die Eingabe von hexadezimalen und oktalen Ganzzahl-Flags.

Das vollständige Verhalten finden Sie in der Dokumentation für

strconv.ParseInt und nicht in seiner Verwendung im flag, das dokumentiert ist. strconv.ParseInt 的文档中找到完整的行为,而不是它的flag

Das obige ist der detaillierte Inhalt vonGanzzahlige Argumente mit führenden Nullen werden von flag.IntVar oder flag.Int als Oktalargumente analysiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen