入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

Go语言string与[]byte类型转化避免拷贝

创建时间:2016-11-30 投稿人: 浏览次数:5346

在Go语言中string类型与[]byte强制类型转化的是后会发生内存拷贝,这是由于这两种类型的特性所决定的;
string类型是不允许修改内容,[]byte是可以修改的。

下面提供两个函数使用时不会发生内存拷贝吗,但是使用过程中药慎重,确保不会修改底层内容,否则很大可能会导致程序异常

import (
    "reflect"
    "unsafe"
)

func String(b []byte) (s string) {
    pbytes := (*reflect.SliceHeader)(unsafe.Pointer(&b))
    pstring := (*reflect.StringHeader)(unsafe.Pointer(&s))
    pstring.Data = pbytes.Data
    pstring.Len = pbytes.Len
    return
}

func Slice(s string) (b []byte) {
    pbytes := (*reflect.SliceHeader)(unsafe.Pointer(&b))
    pstring := (*reflect.StringHeader)(unsafe.Pointer(&s))
    pbytes.Data = pstring.Data
    pbytes.Len = pstring.Len
    pbytes.Cap = pstring.Len
    return
}
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
  • 上一篇:没有了
  • 下一篇:没有了
未上传头像