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!