Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah cara saya menukar int32 kepada rentetan dalam Golang tanpa penukaran perantaraan?

Bagaimanakah cara saya menukar int32 kepada rentetan dalam Golang tanpa penukaran perantaraan?

Barbara Streisand
Barbara Streisandasal
2024-11-01 12:23:02564semak imbas

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

Menukar int32 kepada Rentetan dalam Golang Tanpa Penukaran Perantaraan

Menukar int32 kepada rentetan di Golang ialah tugas biasa yang boleh dicapai menggunakan pelbagai teknik. Walaupun sesetengah pendekatan memerlukan penukaran perantaraan kepada int atau int64, adalah mungkin untuk mencapai penukaran langsung tanpa langkah ini.

fmt.Sprint(i)

Yang paling mudah dan paling mudah kaedah yang cekap ialah menggunakan fmt.Sprint(i). Fungsi ini menukarkan sebarang jenis antara muka{} kepada rentetan, termasuk int32. Ia secara dalaman melaksanakan pemformatan yang diperlukan untuk mewakili nilai sebagai rentetan.

Fungsi Penukaran Tersuai

Untuk senario kritikal prestasi, fungsi penukaran tersuai boleh menyediakan penyelesaian terpantas . Coretan kod berikut melaksanakan fungsi yang menukar int32 kepada rentetan tanpa penukaran perantaraan:

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

Menanda Aras Pendekatan Berbeza

Berikut ialah perbandingan penanda aras pelbagai kaedah:

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

Berikut ialah hasil prestasi:

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

Seperti yang terbukti daripada penanda aras, fmt.Sprint(i) memberikan prestasi terbaik, diikuti dengan fungsi penukaran tersuai String(i) . Kaedah lain yang melibatkan penukaran perantaraan adalah nyata lebih perlahan.

Kesimpulan

Walaupun menukar int32 kepada rentetan dalam Golang selalunya memerlukan langkah penukaran perantaraan, adalah mungkin untuk melakukan penukaran secara terus . fmt.Sprint(i) menawarkan pendekatan yang paling cekap dan mudah, manakala fungsi penukaran tersuai boleh menyediakan penyelesaian terpantas untuk senario sensitif prestasi.

Atas ialah kandungan terperinci Bagaimanakah cara saya menukar int32 kepada rentetan dalam Golang tanpa penukaran perantaraan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn