util_unsafe.go 515 B

1234567891011121314151617181920212223
  1. // +build !appengine,!js
  2. package util
  3. import (
  4. "reflect"
  5. "unsafe"
  6. )
  7. // BytesToReadOnlyString returns a string converted from given bytes.
  8. func BytesToReadOnlyString(b []byte) string {
  9. return *(*string)(unsafe.Pointer(&b))
  10. }
  11. // StringToReadOnlyBytes returns bytes converted from given string.
  12. func StringToReadOnlyBytes(s string) (bs []byte) {
  13. sh := (*reflect.StringHeader)(unsafe.Pointer(&s))
  14. bh := (*reflect.SliceHeader)(unsafe.Pointer(&bs))
  15. bh.Data = sh.Data
  16. bh.Cap = sh.Len
  17. bh.Len = sh.Len
  18. return
  19. }