unsafe.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package main
  2. import (
  3. "fmt"
  4. "unsafe"
  5. )
  6. func Float64bits(f float64) uint64 {
  7. return *(*uint64)(unsafe.Pointer(&f))
  8. }
  9. func main() {
  10. a := int64(1)
  11. fmt.Println("memory pointer for var `a`", unsafe.Pointer(&a))
  12. fmt.Println("memory size for var `a`", unsafe.Sizeof(a))
  13. println("-------")
  14. f := 10.11
  15. fmt.Printf("%d\n", Float64bits(f))
  16. fmt.Printf("%#016x\n", Float64bits(f))
  17. fmt.Printf("%b\n", Float64bits(f))
  18. // return
  19. println("-------")
  20. type Message struct {
  21. flag1 bool
  22. flag2 bool
  23. name string
  24. }
  25. msg := Message{
  26. flag1: false,
  27. flag2: false,
  28. name: "Neque porro quisquam est qui dolorem",
  29. }
  30. fmt.Println("memory size for Message struct", unsafe.Sizeof(msg))
  31. fmt.Println(
  32. "flag1 Sizeof", unsafe.Sizeof(msg.flag1),
  33. "Alignof", unsafe.Alignof(msg.flag1),
  34. "Offsetof", unsafe.Offsetof(msg.flag1),
  35. )
  36. fmt.Println(
  37. "flag2 Sizeof", unsafe.Sizeof(msg.flag2),
  38. "Alignof", unsafe.Alignof(msg.flag2),
  39. "Offsetof", unsafe.Offsetof(msg.flag2),
  40. )
  41. fmt.Println(
  42. "name Sizeof", unsafe.Sizeof(msg.name),
  43. "Alignof", unsafe.Alignof(msg.name),
  44. "Offsetof", unsafe.Offsetof(msg.name),
  45. )
  46. }