在单个语句上向字符串添加整数值

cam*_*ge 0 string int type-conversion go

我想知道如何将整数值添加到像"10"这样的字符串值.我知道我可以通过将其string转换为int第一个然后添加整数后将其转换回来实现此目的string.但我可以在golang的单个语句中完成此任务.例如,我可以用这样的多行来做到这一点:

i, err := strconv.Atoi("10")
// handle error
i = i + 5
s := strconv.Itoa(i)
Run Code Online (Sandbox Code Playgroud)

但是,有什么办法可以在一个声明中完成这个任务吗?

icz*_*cza 7

标准库中没有准备好的功能可用于您想要执行的操作.其原因在于,将数字添加到可用作为a的数字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
}
Run Code Online (Sandbox Code Playgroud)

使用它:

s, err := add("10", 5)
fmt.Println(s, err)
Run Code Online (Sandbox Code Playgroud)

输出(在Go Playground上试试):

15 <nil>
Run Code Online (Sandbox Code Playgroud)