github.com/HaHadaxigua/yaegi@v1.0.1/_test/unsafe3.go (about)

     1  package main
     2  
     3  import (
     4  	"math/bits"
     5  	"unsafe"
     6  )
     7  
     8  const (
     9  	SSize = 16
    10  	WSize = bits.UintSize / 8
    11  )
    12  
    13  type S struct {
    14  	X int
    15  	Y int
    16  }
    17  
    18  func main() {
    19  	bigEndian := (*(*[2]uint8)(unsafe.Pointer(&[]uint16{1}[0])))[0] == 0
    20  	var sBuf [SSize]byte
    21  	s := (*S)(unsafe.Pointer(&sBuf[0]))
    22  
    23  	s.X = 2
    24  	s.Y = 4
    25  
    26  	if bigEndian {
    27  		println(sBuf[0+WSize-1], sBuf[WSize+WSize-1])
    28  	} else {
    29  		println(sBuf[0], sBuf[WSize])
    30  	}
    31  }
    32  
    33  // Output:
    34  // 2 4