golang 编程笔记

【golang】性能优化--字符串

2020-08-04  本文已影响0人  dongzd

使用[]byte代替string

字符串

字符串是一系列8位字节的集合,默认初始化值为"",同时字符串的值是不可以改变的。其数据结构为:

type stringHeader struct {
            data unsafe.Pointer
            len int
}

[]byte

byte是int8的别名,区别于rune是int32别名。其数据结构为:
type sliceHeader struct{
data unsafe.Pointer
len int
cap int
}

[]byte相比于string的优点

字符串的值是不可以改变的,但是字符串内部指向数据的指针,是可以被替换的。

s := "123"
s = 456

以上在给s重新赋值456时候,会从新开辟一块内存,替换原来存储123的内存地址,之前分配的内存等待系统gc。而对于[]byte是可以更改内容的

s :=[]byte{1}
s=[]byte{2}

以上内容更改不会重新开辟内存。所以在大量字符串操作使用byte代替可以很好的优化系统性能。

string相对于[]byte的好处

string是可以直接比较的,而[]byte不可以,[]byte不可以当作map键值。

善用bytes.Buffer来追加string

当需要拼接一个字符串时候使用a+=b,连接效率底下,尤其在大量使用情况下,者导致大量内存开销和拷贝,使用字符数组,用缓存向其添加

var buf bytes.Buffer
buf.WriteString(str)
fmt.Println(b.String())

但是最好的优化,就是不优化,如果为了增加那么一丁点性能,降低代码可读性,不如不优化。

上一篇下一篇

猜你喜欢

热点阅读