Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "fmt"
- "reflect"
- "unsafe"
- )
- type NestType struct {
- S string
- I int
- }
- type AllTypes struct {
- I int
- F float64
- Array []int
- M map[string]string
- MM map[int]interface{}
- }
- func AllTypesToBytes(v *AllTypes) []byte {
- var s reflect.SliceHeader
- size := (int)(unsafe.Sizeof(AllTypes{}))
- s.Len = size
- s.Cap = size
- s.Data = uintptr(unsafe.Pointer(v))
- return *(*[]byte)(unsafe.Pointer(&s))
- }
- func BytesToAllTypes(v []byte) *AllTypes {
- return (*AllTypes)(unsafe.Pointer((*reflect.SliceHeader)(unsafe.Pointer(&v)).Data))
- }
- func main() {
- a := &AllTypes{1, 2.0, []int{1, 2, 3, 4, 5}, map[string]string{"foo": "bar"}, map[int]interface{}{1: "abc", 2: 123}}
- b := AllTypesToBytes(a)
- fmt.Printf("origin data [%v]\n", a)
- fmt.Printf("binary data [%x] size = %d\n", b, len(b))
- x := BytesToAllTypes(b)
- fmt.Printf("bytes to struct [%v]\n", x)
- }
Add Comment
Please, Sign In to add comment