最好不要用這種方式:
var line string
bytes := *(*[]byte)(unsafe.Pointer(&line)) // 遇到bytes的len大於0,cap為0的情況,操作bytes的時候,會panic
var d []byte
line = *(*string)(unsafe.Pointer(&d))
推薦以下方式:
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
}