func (q *Queue) Push(x interface{}) {
	n := new(node)
	n.val = x
	prev := (*node)(atomic.SwapPointer((*unsafe.Pointer)(unsafe.Pointer(&q.head)), unsafe.Pointer(n)))
	atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(&prev.next)), unsafe.Pointer(n))
}
Push adds x to the back of the queue.

Push can be safely called from multiple goroutines
package mpsc
import (
	"sync/atomic"
	"unsafe"
)
type node struct {
	next *node
	val  interface{}
}
type Queue struct {
	head, tail *node
}
func New() *Queue {
	q := &Queue{}
	stub := &node{}
	q.head = stub
	q.tail = stub
	return q
}