相对于C语言,golang是类型安全的语言。但是安全的代价就是性能的妥协。下面我们看看Golang不想让我们看到的“秘密”――string的底层数据。通过reflect包,我们可以知道,在Golang底层,string和slice其实都是struct:其中Data是一个指针,指向实际的数据地址,Len表示数据长度。但是,在string和[]byte转换过程中,Golang究竟悄悄帮我们做了什么,来达到安全的目的?在Golang语言规范里面,string数据是禁止修改的,试图通过&s[0], &b[0]取得string和slice数据指针地址也是不能通过编译的。下面我们就通过这几个“黑科技”来测试一下语言底层的秘密:结论如下:1、string常量会在编译期分配到只读段,对应数据地址不可写入,并且相同的string常量不会重复存储。

golang 的string与[]byte转换方式

golang 的string与[]byte转换方式

golang 的string与[]byte转换方式