github.com/wangkui503/aero@v1.0.0/Unsafe.go (about) 1 package aero 2 3 import ( 4 "reflect" 5 "unsafe" 6 ) 7 8 // BytesToStringUnsafe converts a byte slice to a string. 9 // It's fast, but not safe. Use it only if you know what you're doing. 10 func BytesToStringUnsafe(b []byte) string { 11 bytesHeader := (*reflect.SliceHeader)(unsafe.Pointer(&b)) 12 strHeader := reflect.StringHeader{ 13 Data: bytesHeader.Data, 14 Len: bytesHeader.Len, 15 } 16 return *(*string)(unsafe.Pointer(&strHeader)) 17 } 18 19 // StringToBytesUnsafe converts a string to a byte slice. 20 // It's fast, but not safe. Use it only if you know what you're doing. 21 func StringToBytesUnsafe(s string) []byte { 22 strHeader := (*reflect.StringHeader)(unsafe.Pointer(&s)) 23 bytesHeader := reflect.SliceHeader{ 24 Data: strHeader.Data, 25 Len: strHeader.Len, 26 Cap: strHeader.Len, 27 } 28 return *(*[]byte)(unsafe.Pointer(&bytesHeader)) 29 }