问题
将基本类型值(例如 int
或 bool
)转换为其字符串表示形式。
解决方案
阅读链接资源后,我发现主要有两种方法可以解决该问题:
方法 1:使用 strconv
包。
strconv.Itoa(10)
strconv.FormatBool(false)
方法 2:使用 fmt.Sprintf()
方法
fmt.Sprintf("%v", 10)
fmt.Sprintf("%v", false)
我想知道在这些备选方案之间进行选择时可以遵循的一般准则。比较(性能,速度和内存)也可能对讨论有用。
读物
How to convert a bool to a string in Go?
How to convert an int value to string in Go?
这实际上取决于很多因素。
还有更多方法,例如fmt.Sprintf("%d", 10)
或 strconv.Append*
系列。虽然 fmt.Sprintf 非常灵活且可读性强,但 strconv.Itoa 是一个方便的函数并且速度更快,而 strconv.Append 系列产生的垃圾比其他系列少。
您应该关注可读性而不是一般规则。将单个 int 转换为字符串最好使用 strvonv.Itoa 完成。但是,当您已经导入 fmt 时导入 strconv 只是为了使用 Itoa 可能有点矫枉过正。如果转换发生在垃圾收集可能成为问题的内部循环中,您可能需要使用 strcnv.Append-stuff。可以使用 if
将 bool 转换为字符串,这可能允许轻松本地化(上述解决方案均未提供)。包 strconv 不包含格式化功能,例如complex128 或指针,因此您必须使用包 fmt。
这是一个简单但错误的答案:“要将 int
转换为 string
,请使用 strconv.Itoa,因为它简短、清晰且快速”。
这是错误的,因为有时使用 fmt 可能更清晰,尤其是当您仍然需要它时,有时两者(strvonv.Itoa 和 fmt.Sprintf)产生的额外垃圾太高了。
如果转换不在内部循环或关键执行路径上:做任何你觉得舒服的事情,并产生一致和可读的代码。所以答案只是基于意见。