code: func MsgPipe() (*MsgPipeRW, *MsgPipeRW) {
  	var (
  		c1, c2  = make(chan Msg), make(chan Msg)
  		closing = make(chan struct{})
  		closed  = new(int32)
  		rw1     = &MsgPipeRW{c1, c2, closing, closed}
  		rw2     = &MsgPipeRW{c2, c1, closing, closed}
  	)
  	return rw1, rw2
  }
docs: // MsgPipe creates a message pipe. Reads on one end are matched
  // with writes on the other. The pipe is full-duplex, both ends
  // implement MsgReadWriter.