golang无复制高效实现string与[]byte转换

 时间:2024-10-12 02:54:55

1、写一个字符串string和字节数组[]byte相互转换的demo,该demo很简单、容易理解;注意最后一行的赋值语句仅仅是为了避免编译错误哦,如果没这句编译时将报未使用变量b的编译错误。

golang无复制高效实现string与[]byte转换

2、编译程序:go build -gcflags "-m -l -N",其中-l -N禁止了一切优化;编译成功后用gdb加载弛贾班隧程序查看string和[]byte的数据结构;这里如果不熟悉gdb的指令请查找相关资料充电。

golang无复制高效实现string与[]byte转换

3、转换后 [ ]byte 底层数组与原 string 内部指针并不相同(前者为0xc4200猱蝰逾鸾57f30后者为0旌忭檀挢x469ca8),以此可确定数据被复制。ptype的输出可以知道前者的底层数据结构比后者只是多了一个cap字段,前者可以看作[3]uintptr{ptr, len, len},后者可以看作[2]uintptr,可以利用unsafe.Pointer来在编译期做转换。

golang无复制高效实现string与[]byte转换

4、参考步骤2,用gdb加载程序查看s、s2、b变量底层数据结构里指针的值,看看是否都一样;结果显示是一样的。

golang无复制高效实现string与[]byte转换

5、测试转换在启用优化时结果是正确的。尽管从步骤4可以推断转换是没问题的,但因为步骤4编译时禁用了优化可能会与实际不一致。

golang无复制高效实现string与[]byte转换
  • Git GUI 可视化极简易图文教程
  • Beyond Compare 4注册码_序列号如何获取
  • ADI-CrossCore Embedded Studio软件使用教程
  • jQuery对象访问的方法
  • 常见的四中域名解析类型
  • 热门搜索
    剖腹产后怎么瘦肚子 荣威怎么样 福特翼搏怎么样 委托书怎么写范文 肾囊肿怎么治疗 个人怎么做微信小程序 宝马5系怎么样 蹈怎么组词 借条怎么写范本 空调制热怎么调