Heim >Backend-Entwicklung >Golang >Ganzzahlige Argumente mit führenden Nullen werden von flag.IntVar oder flag.Int als Oktalargumente analysiert
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.
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?
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!