Home  >  Article  >  Backend Development  >  How do I convert an int32 to a string in Golang without intermediate conversions?

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

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

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

Converting int32 to String in Golang Without Intermediate Conversions

Converting an int32 to a string in Golang is a common task that can be accomplished using various techniques. While some approaches require intermediate conversions to int or int64, it is possible to achieve direct conversion without these steps.

fmt.Sprint(i)

The simplest and most efficient method is to utilize fmt.Sprint(i). This function converts any interface{} type to a string, including int32. It internally performs the necessary formatting to represent the value as a string.

Custom Conversion Function

For performance-critical scenarios, a custom conversion function can provide the fastest solution. The following code snippet implements a function that converts int32 to string without intermediate conversions:

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

Here's a benchmark comparison of the various methods:

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

Here are the performance results:

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

As evident from the benchmarks, fmt.Sprint(i) provides the best performance, followed by the custom conversion function String(i). The other methods involving intermediate conversions are noticeably slower.

Conclusion

While converting int32 to string in Golang often requires intermediate conversion steps, it is possible to perform the conversion directly. fmt.Sprint(i) offers the most efficient and convenient approach, while a custom conversion function can provide the fastest solution for performance-sensitive scenarios.

The above is the detailed content of How do I convert an int32 to a string in Golang without intermediate conversions?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn