Heim  >  Artikel  >  Backend-Entwicklung  >  Wie konvertiere ich in Golang ein int32 ohne Zwischenkonvertierungen in einen String?

Wie konvertiere ich in Golang ein int32 ohne Zwischenkonvertierungen in einen String?

Barbara Streisand
Barbara StreisandOriginal
2024-11-01 12:23:02564Durchsuche

How do I convert an int32 to a string in Golang without intermediate conversions?

Int32 in einen String in Golang ohne Zwischenkonvertierungen konvertieren

Das Konvertieren eines int32 in einen String in Golang ist eine häufige Aufgabe, die mit erledigt werden kann verschiedene Techniken. Während einige Ansätze Zwischenkonvertierungen in int oder int64 erfordern, ist es möglich, eine direkte Konvertierung ohne diese Schritte zu erreichen.

fmt.Sprint(i)

Die einfachste und einfachste Eine effiziente Methode ist die Verwendung von fmt.Sprint(i). Diese Funktion konvertiert jeden Interface{}-Typ in einen String, einschließlich int32. Es führt intern die erforderliche Formatierung durch, um den Wert als Zeichenfolge darzustellen.

Benutzerdefinierte Konvertierungsfunktion

Für leistungskritische Szenarien kann eine benutzerdefinierte Konvertierungsfunktion die schnellste Lösung bieten . Der folgende Codeausschnitt implementiert eine Funktion, die int32 ohne Zwischenkonvertierungen in einen String konvertiert:

<code class="go">func String(n int32) string {
    buf := [11]byte{}
    pos := len(buf)
    i := int64(n)
    signed := i < 0
    if signed {
        i = -i
    }
    for {
        pos--
        buf[pos], i = '0'+byte(i%10), i/10
        if i == 0 {
            if signed {
                pos--
                buf[pos] = '-'
            }
            return string(buf[pos:])
        }
    }
}</code>

Benchmarking verschiedener Ansätze

Hier ist ein Benchmark-Vergleich der verschiedenen Methoden:

<code class="go">package main

import (
    "fmt"
    " strconv"
    " time"
)

func main() {
    var s string
    i := int32(-2147483648)
    t := time.Now()
    for j := 0; j < 50000000; j++ {
        s = String(i) //5.5923198s
        //s = String2(i) //5.5923199s
        //s = strconv.FormatInt(int64(i), 10) // 5.9133382s
        //s = strconv.Itoa(int(i)) //5.9763418s
        //s = fmt.Sprint(i) // 13.5697761s
    }
    fmt.Println(time.Since(t))
    fmt.Println(s)
}

func String(n int32) string {
    ...
}

...</code>

Hier sind die Leistungsergebnisse:

Method Time (seconds)
String(i) 5.5923198
fmt.Sprint(i) 13.5697761
strconv.Itoa(int(i)) 5.9763418
strconv.FormatInt(int64(i), 10) 5.9133382

Wie aus den Benchmarks hervorgeht, bietet fmt.Sprint(i) die beste Leistung, gefolgt von der benutzerdefinierten Konvertierungsfunktion String(i) . Die anderen Methoden mit Zwischenkonvertierungen sind deutlich langsamer.

Fazit

Während die Konvertierung von int32 in String in Golang häufig Zwischenkonvertierungsschritte erfordert, ist es möglich, die Konvertierung direkt durchzuführen . fmt.Sprint(i) bietet den effizientesten und bequemsten Ansatz, während eine benutzerdefinierte Konvertierungsfunktion die schnellste Lösung für leistungsempfindliche Szenarien bieten kann.

Das obige ist der detaillierte Inhalt vonWie konvertiere ich in Golang ein int32 ohne Zwischenkonvertierungen in einen String?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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