Go:部分字符串引用

问题描述 投票:0回答:1

说我有一个

string
。我想将该字符串的一部分传递给另一个函数进行处理(只读)。 C方式就是这样的

void dosomething(char *str, int start, int end) { /*...*/ }

当然我可以在 go 中做同样的事情

func dosomething(str *string, int start, int end) { /*...*/ }

但是对于字符串以外的任何其他类型,我只会使用切片

func dosomething(str []byte) { /*...*/ }

更干净、更紧凑。但是对字符串进行切片会创建一个新字符串而不是切片引用。

传递部分字符串引用的预期方式是什么? (我已经有了一个字符串,我觉得将其转换回 []byte 是浪费资源。)

编辑:它不会复制字符串。这个问题本身就回答了。

go
1个回答
0
投票

对字符串进行切片不会创建新的底层切片。

somestr[2:4]
有效,不会创建新切片。它只会创建一个新的字符串标头,其同一底层字节切片的起点和终点不同。

唯一的例外是,当您未设置起点或终点(

somestr[:]
)时,这将创建底层字节切片的副本。

© www.soinside.com 2019 - 2024. All rights reserved.