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

王林
Freigeben: 2024-02-08 21:10:08
nach vorne
612 Leute haben es durchsucht

带有前导零的整数参数由 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)
}
Nach dem Login kopieren

Wenn ich diesen Befehl ausführe:

./a -i 10
10
Nach dem Login kopieren

Die Ausgabe ist korrekt.

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

./a -i 010
i < 9
8
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!