go 迭代string数组,直接拷贝去用即可

补充:golang字符串string与字符数组[]byte高效转换

string与[]byte的直接转换是通过底层数据copy实现的

var a = []byte(“hello boy”)

var b = string(a)

这种操作在并发量达到十万百万级别的时候会拖慢程序的处理速度

通过gdb调试来看一下string和[]byte的数据结构

转换后 [ ]byte 底层数组与原 string 内部指针并不相同,以此可确定数据被复制。那么,如不修改数据,仅转换类型,是否可避开复制,从而提升性能?

从 ptype 输出的结构来看,string 可看做 [2]uintptr,而 [ ]byte 则是 [3]uintptr,这便于我们编写代码,无需额外定义结构类型。如此,str2bytes 只需构建 [3]uintptr{ptr, len, len},而 bytes2str 更简单,直接转换指针类型,忽略掉 cap 即可。

通过unsafe.pointer(指针转换)和uintptr(指针运算)实现转换

没有出现逃逸现象

对比一下优化前后的性能差异

没有额外开辟内存0b/op,执行效率:5亿次耗时1.6秒,而不用unsafe.pointer和uintptr转换300次耗时久达到了1.1秒,效率对比高下立判

以上为个人经验,希望能给大家一个参考,也希望大家多多支持www.887551.com。如有错误或未考虑完全的地方,望不吝赐教。