我需要在Golang中将转换int32
为string
。是否有可能转换int32
到string
在Golang无须转换为int
或int64
第一?
Itoa
需要一个int
。FormatInt
需要一个int64
。
一线的答案是fmt.Sprint(i)
。
无论如何,甚至在标准库函数(例如)内部都有很多转换,fmt.Sprint(i)
因此您有一些选择(尝试使用Go
Playground
):
1-您可以编写转换函数( 最快 ):
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:])
}
}
}
2-您可以使用fmt.Sprint(i)
( 慢 )
参见内部:
// Sprint formats using the default formats for its operands and returns the resulting string.
// Spaces are added between operands when neither is a string.
func Sprint(a ...interface{}) string {
p := newPrinter()
p.doPrint(a)
s := string(p.buf)
p.free()
return s
}
3-您可以使用strconv.Itoa(int(i))
( 快速 )
参见内部:
// Itoa is shorthand for FormatInt(int64(i), 10).
func Itoa(i int) string {
return FormatInt(int64(i), 10)
}
4-您可以使用strconv.FormatInt(int64(i), 10)
( 更快 )
请参阅内部:
// FormatInt returns the string representation of i in the given base,
// for 2 <= base <= 36. The result uses the lower-case letters 'a' to 'z'
// for digit values >= 10.
func FormatInt(i int64, base int) string {
_, s := formatBits(nil, uint64(i), base, i < 0, false)
return s
}
比较和基准测试(具有50000000次迭代):
s = String(i) takes: 5.5923198s
s = String2(i) takes: 5.5923199s
s = strconv.FormatInt(int64(i), 10) takes: 5.9133382s
s = strconv.Itoa(int(i)) takes: 5.9763418s
s = fmt.Sprint(i) takes: 13.5697761s
码:
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 {
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:])
}
}
}
func String2(n int32) string {
buf := [11]byte{}
pos := len(buf)
i, q := int64(n), int64(0)
signed := i < 0
if signed {
i = -i
}
for {
pos--
q = i / 10
buf[pos], i = '0'+byte(i-10*q), q
if i == 0 {
if signed {
pos--
buf[pos] = '-'
}
return string(buf[pos:])
}
}
}
问题内容: 我正在尝试找到转换的最佳方法 键入字符串。我尝试使用marshall转换为json以保留格式,然后转换回字符串,但这未成功。更具体地说,我正在尝试将包含键和值的映射转换为字符串以容纳https://www.nomadproject.io/docs/job- specification/template.html#environment-variables https://github.
问题内容: 我正在使用github.com/fatih/structs包将struct的所有字段的值转换为函数。看这里。这工作正常,但最终我想通过使用csv包将值写入csv文件。该功能需要作为输入。 简而言之:我如何轻松地将的输出转换为字符串数组? 问题答案: 即使所有值都是具体类型,也不能简单地转换为,因为这两种类型具有不同的内存布局/表示形式。 您必须定义如何用值表示不同类型的值。 最简单和明
我想将字符串转换为int64。我从<code>strconv ParseInt实际上返回一个int64: 所以如果我想从一个字符串中获取一个int64,我应该避免使用Atoi,而是使用ParseInt吗?还是有Atio64藏在某个地方?
问题内容: 我正在从文件中读取时间戳,并将值分配给: 当我尝试解析字符串时: 结果是: 但我希望结果是: ? 请指教。 问题答案: 您没有正确提供的参数。您应该以给定格式使用(这是不可思议的值,您以所需的格式创建了一个字符串,但带有该日期),因此在您的情况下,它将加上我不知道的偏移量MST我的头顶。
问题内容: 我正在尝试将字节切片转换为GoLang中的。我找不到在线解决此问题的方法。我见过先转换为字符串然后转换为a的建议,但这似乎不起作用,它失去了它的值,最后以零结束。 例: 而且它不起作用… 问题答案: 例如, 输出:
问题内容: 如果字符串是java中的任何有效数字(例如int,long,double等),我如何将字符串转换为抽象数字。 我将不知道字符串中数字的类型,所以我不能使用特定的原始解析(例如Integer.parseInt,Long.parseLong等)。有什么通用的方法可以转换它吗? 例如: 字符串->数字 “ 23423”-> 23423 “ 34.3”-> 34.3 “ 45364573747