如题
我想知道以下了两种写法有啥不一样的吗,都是string强转[]byte
第一种
func string2Bytes (s string) []byte {
sh := (*reflect.StringHeader)(unsafe.Pointer(&s))
bh := reflect.SliceHeader{
Data: sh.Data,
Len: sh.Len,
Cap: sh.Len,
}
return *(*[]byte)(unsafe.Pointer(&bh))
}
第二种
func string2Bytes (s string) []byte {
sh := (*[]byte) (unsafe.Pointer(&s))
return *sh
第一种是正解,第二种特定情况下不安全,切片的Cap是string范围外的一个值了,可以测试出来。
代码自己跑