788 Stimmen

Wie konvertiert man einen int-Wert in einen String in Go?

i := 123
s := strconv.Itoa(i) 

s ist 'E', aber ich möchte "123"

Bitte sagen Sie mir, wie ich "123" bekommen kann.

Und in Java kann ich es auf diese Weise tun:

String s = "ab" + "c"  // s ist "abc"

wie kann ich in Go zwei Zeichenfolgen zusammenfügen?

0 Stimmen

Die zweite Frage (Zeichenkettenverknüpfung) hat eine Antwort anderswo, die Effizienz behandelt.

0 Stimmen

strconv.Itoa(i) (int to ASCII), um eine Ganzzahl in einen String zu setzen. Siehe stackoverflow.com/a/62737936/12817546. strconv.Atoi(s) (ASCII zu int), um einen String in eine Ganzzahl umzuwandeln. Siehe stackoverflow.com/a/62740786/12817546.

1209voto

Klaus Byskov Pedersen Punkte 111081

Verwenden Sie die Funktion Itoa des strconv Pakets.

Zum Beispiel:

package main

import (
    "strconv"
    "fmt"
)

func main() {
    t := strconv.Itoa(123)
    fmt.Println(t)
}

Sie können Zeichenketten einfach durch Verknüpfung mit + oder durch Verwendung der Join-Funktion des strings Pakets verbinden.

4 Stimmen

Wenn Sie viele Zeichenkettenverknüpfungen durchführen müssen (zum Beispiel, um eine lange Zeichenkette zu erstellen) und möchten, dass Ihr Code schneller und mit weniger Allokationen läuft, sollten Sie auch in Betracht ziehen, bytes.Buffer zu verwenden (es handelt sich um eine Art generischere Version von Javas StringBuilder).

260 Stimmen

Warum dachten die Sprachdesigner, dass kryptische Funktionsnamen wie "Itoa" bevorzugt werden, anstatt etwas zu verwenden, das vielleicht etwas beschreibender wäre?

62 Stimmen

@luke Es stammt aus dem C-Erbe, wo die gesamte Maschine möglicherweise über 256 KB Speicher verfügte; Benutzerfreundlichkeit wurde geopfert, um mehr Funktionalität unterzubringen. Die Schöpfer von Go sind alle tief in diesem Erbe verankert und fühlen sich mit diesen Namen vollkommen wohl.

205voto

Jasmeet Singh Punkte 2167
fmt.Sprintf("%v",Wert);

Wenn Sie den spezifischen Typ des Wertes kennen, verwenden Sie den entsprechenden Formatter, zum Beispiel %d für int

Weitere Informationen - fmt

32 Stimmen

Ich würde dies nicht empfehlen, da dies weitaus weniger effizient ist als andere Konvertierungsmethoden, da es Reflexion verwendet.

2 Stimmen

Aber wenn Sie den spezifischen Typ nicht kennen, ist Sprintf der richtige Weg.

1 Stimmen

Ich habe gehört, dass die Implementierung von sprintf in c, um eine JSON-Datei zu parsen, der Grund dafür war, dass der Online-Modus von GTA früher etwa 14 Minuten zum Starten benötigte. Ein Indie-Entwickler wies darauf hin und die Ladezeit sank auf rund ~1,5 Minuten.

96voto

Bryce Punkte 2686

fmt.Sprintf, strconv.Itoa und strconv.FormatInt werden die Arbeit erledigen. Aber Sprintf wird das Paket reflect verwenden und ein weiteres Objekt zuweisen, sodass es keine effiziente Wahl ist.

Bildbeschreibung hier eingeben

0 Stimmen

Und strconv.FormatUint() für uint64 -> string

84voto

kgthegreat Punkte 1062

Es ist interessant festzustellen, dass strconv.Itoa eine Abkürzung für

func FormatInt(i int64, base int) string

mit der Basis 10 ist.

Zum Beispiel:

strconv.Itoa(123)

ist äquivalent zu

strconv.FormatInt(int64(123), 10)

14 Stimmen

Interessant ist zu bemerken, dass der direkte Aufruf von FormatInt() anstelle von Itoa() laut dem Benchmark unter stackoverflow.com/a/38077508/968244 0,1 Nanosekunden spart.

46voto

lazy1 Punkte 12416

Sie können fmt.Sprintf oder strconv.FormatFloat verwenden

Zum Beispiel

package main

import (
    "fmt"
)

func main() {
    val := 14.7
    s := fmt.Sprintf("%f", val)
    fmt.Println(s)
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X