说我有一个长
string
。我想将该字符串的一部分传递给另一个函数进行处理(只读)。 C方式就是这样的
void dosomething(char *str, int start, int end) { /*...*/ }
当然我可以在 go 中做同样的事情
func dosomething(str *string, int start, int end) { /*...*/ }
但是对于字符串以外的任何其他类型,我只会使用切片
func dosomething(str []byte) { /*...*/ }
更干净、更紧凑。但是对字符串进行切片会创建一个新字符串而不是切片引用。
传递部分字符串引用的预期方式是什么? (我已经有了一个字符串,我觉得将其转换回 []byte 是浪费资源。)
编辑:它不会复制字符串。这个问题本身就回答了。
对字符串进行切片不会创建新的底层切片。
somestr[2:4]
有效,不会创建新切片。它只会创建一个新的字符串标头,其同一底层字节切片的起点和终点不同。
唯一的例外是,当您未设置起点或终点(
somestr[:]
)时,这将创建底层字节切片的副本。