Go 性能优化
string 与 []byte 互转
利用了底层 string 和 byte slice 实现的技巧,如果需要大量互转可以使用这种方式。
/*
type StringHeader struct {
Data uintptr
Len int
}
type SliceHeader struct {
Data uintptr
Len int
Cap int
}
*/
func str2bytes(s string) []byte {
x := (*[2]uintptr)(unsafe.Pointer(&s))
b := [3]uintptr{x[0], x[1], x[1]}
return *(*[]byte)(unsafe.Pointer(&b))
}
func bytes2str(b []byte) string {
return *(*string)(unsafe.Pointer(&b))
}
字符串拼接
大量字符串拼接不要用 + ,使用 bytes.Buffer 或者 strings.Builder
// bytes.Buffer
package main
import (
"fmt"
"bytes"
)
func main() {
var b bytes.Buffer
b.WriteString("abc")
b.WriteString("def")
fmt.Println(b.String()) // abcdef
}
// strings.Builder
package main
import (
"fmt"
"strings"
)
func main() {
var sb strings.Builder
sb.WriteString("First")
sb.WriteString("Second")
fmt.Println(sb.String()) // FirstSecond
}
当前内容版权归 PegasusWang 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 PegasusWang .