golang无复制高效实现string与[]byte转换
1、写一个字符串string和字节数组[]byte相互转换的demo,该demo很简单、容易理解;注意最后一行的赋值语句仅仅是为了避免编译错误哦,如果没这句编译时将报未使用变量b的编译错误。
![golang无复制高效实现string与[]byte转换](https://exp-picture.cdn.bcebos.com/4a594f2c8cf1d8a75b421a3746e34b2c57ee47c4.jpg)
3、转换后 [ ]byte 底层数组与原 string 内部指针并不相同(前者为0xc4200猱蝰逾鸾57f30后者为0旌忭檀挢x469ca8),以此可确定数据被复制。ptype的输出可以知道前者的底层数据结构比后者只是多了一个cap字段,前者可以看作[3]uintptr{ptr, len, len},后者可以看作[2]uintptr,可以利用unsafe.Pointer来在编译期做转换。
![golang无复制高效实现string与[]byte转换](https://exp-picture.cdn.bcebos.com/fdb4f00d3aceaad7f81a5e51eee7340f6578b8c4.jpg)
5、测试转换在启用优化时结果是正确的。尽管从步骤4可以推断转换是没问题的,但因为步骤4编译时禁用了优化可能会与实际不一致。
![golang无复制高效实现string与[]byte转换](https://exp-picture.cdn.bcebos.com/9b2098254193cee82a7506a85a0ff2260c9aa8c4.jpg)
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
阅读量:91
阅读量:35
阅读量:68
阅读量:41
阅读量:73