如题。
如果参数中的 string 非常大的话,复制 string 不是会增加性能开销么?
如果需要比较或者索引超长字符串,有没有什么好用的包,或者说干脆就自己写?
如题。
如果参数中的 string 非常大的话,复制 string 不是会增加性能开销么?
如果需要比较或者索引超长字符串,有没有什么好用的包,或者说干脆就自己写?
|
1
struct String
{ byte* str; int32 len; }; 类似的还有 channel map 切片等,都是引用语义 |
|
UnknwonJul 8, 2016
2
超长的先转 []byte 再索引啊。。。
|
|
3
@htfy96 是这样的,但是感觉结构体是会被复制的, byte* str 的值被复制,两个 byte* str 指向同一个 byte 序列
package main import ( "fmt" ) func main(){ s := "asdf" f(s) fmt.Printf("%p\n", &s) } func f(s string){ fmt.Printf("%p\n", &s) } 输出的指针不一样 |
|
4
超长字符串索引并不会引发性能问题,结贴
|
|
5
string 在底层已经是指针了,具体可以看源码 /usr/local/go/src/runtime/string.go#L215
type stringStruct struct { str unsafe.Pointer len int } 在线也可以看源码: https://golang.org/src/runtime/string.go#L215 |
|
reusJul 9, 2016
6
多虑了,根本不会有性能问题
|
|
mengzhuoJul 9, 2016 via iPhone
7
高性能 golang 编程很少用 string 是因为这货拆分、拼接的时候会 copy 多份
|