【问题标题】:Adding a integer value to string on a single statement在单个语句中将整数值添加到字符串
【发布时间】:2018-03-08 13:32:26
【问题描述】:
我想知道如何将整数值添加到像“10”这样的字符串值。我知道我可以通过首先将string 转换为int 然后在添加整数之后将其转换回string 来实现这一点。但是我可以在 golang 的单个语句中完成此操作吗?例如,我可以用这样的多行来做到这一点:
i, err := strconv.Atoi("10")
// handle error
i = i + 5
s := strconv.Itoa(i)
但是有什么方法可以让我在一个语句中完成这个任务?
【问题讨论】:
标签:
string
go
int
type-conversion
【解决方案1】:
标准库中没有针对您想要执行的操作的现成函数。这样做的原因是因为将一个数字添加到一个可用作 string 的数字上并将结果作为另一个 string 是(非常)效率低下。
string 类型的模型(内存表示)不支持有效地向其添加数字(更不用说string 值是不可变的,必须创建一个新值); int 的内存模型确实支持高效添加(例如,CPU 也有直接操作)。没有人愿意将ints 添加到存储为string 值的数字中。如果您想添加数字,请准备好您的数字:数字。当您要打印或传输时,只需将其转换为string(如果必须)。
但是如果你有一个现成的 util 函数,那么一切都会变成一个单一的语句:
func add(s string, n int) (string, error) {
i, err := strconv.Atoi(s)
if err != nil {
return "", err
}
return strconv.Itoa(i + n), nil
}
使用它:
s, err := add("10", 5)
fmt.Println(s, err)
输出(在Go Playground 上试试):
15 <nil>