首頁  >  文章  >  後端開發  >  如何在 Golang 中將 int32 轉換為字串而不需要中間轉換?

如何在 Golang 中將 int32 轉換為字串而不需要中間轉換?

Barbara Streisand
Barbara Streisand原創
2024-11-01 12:23:02564瀏覽

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

在Golang 中將int32 轉換為String,無需中間轉換

在Golang 中將int32 轉換為字串是一項常見任務,可以使用以下命令完成各種技術。雖然有些方法需要中間轉換為 int 或 int64,但無需這些步驟即可實現直接轉換。

fmt.Sprint(i)

最簡單、最簡單有效的方法是利用 fmt.Sprint(i)。該函數將任何interface{}類型轉換為字串,包括int32。它在內部執行必要的格式化以將值表示為字串。

自訂轉換函數

對於效能關鍵的場景,自訂轉換函數可以提供最快的解決方案。以下程式碼片段實現了一個無需中間轉換即可將int32 轉換為字串的函數:

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

對不同方法進行基準測試

以下是各種方法的基準比較:

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

以下是效能結果:

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

從基準測試可以看出,fmt.Sprint(i) 提供了最佳效能,其次是自訂轉換函數String(i) 。其他涉及中間轉換的方法明顯慢一些。

結論

雖然 Golang 中將 int32 轉換為 string 通常需要中間轉換步驟,但可以直接執行轉換。 fmt.Sprint(i) 提供了最高效、便捷的方法,而自訂轉換函數可以為效能敏感的場景提供最快的解決方案。

以上是如何在 Golang 中將 int32 轉換為字串而不需要中間轉換?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn