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

 时间:2026-02-18 02:24:53

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 内部指针并不相同(前者为0xc420057f30后者为0x469ca8),以此可确定数据被复制。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对象访问的方法
  • 常见的四中域名解析类型
  • 热门搜索
    香港旅游团 巴塞罗那旅游攻略 国民旅游休闲纲要 旅游qq群 竹泉村旅游度假区 冬季国内旅游推荐 安徽旅游必去景点 三天旅游去哪里 海涛旅游 西安市旅游景点