如题。
如果参数中的 string 非常大的话,复制 string 不是会增加性能开销么?
如果需要比较或者索引超长字符串,有没有什么好用的包,或者说干脆就自己写?
1
htfy96 2016-07-08 22:19:18 +08:00 via Android 1
struct String
{ byte* str; int32 len; }; 类似的还有 channel map 切片等,都是引用语义 |
2
Unknwon 2016-07-08 22:24:56 +08:00
超长的先转 []byte 再索引啊。。。
|
3
lizon OP @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
lizon OP 超长字符串索引并不会引发性能问题,结贴
|
5
zwh8800 2016-07-09 12:03:52 +08:00 1
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 |
6
reus 2016-07-09 17:19:40 +08:00
多虑了,根本不会有性能问题
|
7
mengzhuo 2016-07-09 17:32:39 +08:00 via iPhone
高性能 golang 编程很少用 string 是因为这货拆分、拼接的时候会 copy 多份
|