Ich versuche, eine zurückgegebene Zeichenfolge flag.Arg(n)
in eine zu konvertieren int
. Was ist der idiomatische Weg, dies in Go zu tun?
string
go
type-conversion
Matt Joiner
quelle
quelle
func main() { ... }
Nimmt keine Argumente und gibt keinen Wert zurück. Verwenden Sie dieos
Paket -Exit
Funktion zBos.Exit(2).
panic(err)
Einfache Zeichenfolgen konvertieren
Am einfachsten ist es, die
strconv.Atoi()
Funktion zu verwenden.Beachten Sie, dass es viele andere Möglichkeiten gibt. Zum Beispiel
fmt.Sscan()
undstrconv.ParseInt()
die eine größere Flexibilität bieten, da Sie beispielsweise die Basis und die Bitgröße angeben können. Auch wie in der Dokumentation vonstrconv.Atoi()
:Hier ist ein Beispiel mit den genannten Funktionen (probieren Sie es auf dem Go Playground aus ):
Ausgabe (wenn mit Argument aufgerufen
"123"
):Benutzerdefinierte Zeichenfolgen analysieren
Es gibt auch eine praktische Funktion,
fmt.Sscanf()
die noch mehr Flexibilität bietet, da Sie mit der Formatzeichenfolge das Zahlenformat (wie Breite, Basis usw.) zusammen mit zusätzlichen zusätzlichen Zeichen in der Eingabe angeben könnenstring
.Dies ist ideal zum Parsen von benutzerdefinierten Zeichenfolgen, die eine Zahl enthalten. Wenn Ihre Eingabe beispielsweise in einer Form erfolgt, in der
"id:00123"
Sie ein Präfix haben"id:"
und die Zahl auf 5 Stellen festgelegt ist, die mit Nullen aufgefüllt sind, wenn sie kürzer sind, kann dies sehr einfach wie folgt analysiert werden:quelle
ParseInt
spezifizieren?strconv.ParseInt()
Link und Sie sehen sofort :ParseInt(s string, base int, bitSize int)
. Es ist also die Basis: "ParseInt interpretiert einen String s in der angegebenen Basis (2 bis 36)"int
erforderlich ist undstrconv.ParseInt()
verwendet wird, ist eine manuelle Typkonvertierung erforderlich (vonint64
nachint
).Hier sind drei Möglichkeiten, um Zeichenfolgen in Ganzzahlen zu analysieren, von der schnellsten bis zur langsamsten Laufzeit:
strconv.ParseInt(...)
am schnellstenstrconv.Atoi(...)
immer noch sehr schnellfmt.Sscanf(...)
nicht besonders schnell, aber am flexibelstenHier ist ein Benchmark, der die Verwendung und das Beispiel-Timing für jede Funktion zeigt:
Sie können es ausführen, indem Sie es speichern
atoi_test.go
und ausführengo test -bench=. atoi_test.go
.quelle
Versuche dies
quelle
Wenn Sie die Eingabedaten steuern, können Sie die Mini-Version verwenden
die schnellste Option (schreiben Sie Ihren Scheck, falls erforderlich). Ergebnis:
quelle