util_unsafe.go 544 B

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