code: func (seg *segment) encode(ptr []byte) []byte {
  	ptr = ikcp_encode32u(ptr, seg.conv)
  	ptr = ikcp_encode8u(ptr, seg.cmd)
  	ptr = ikcp_encode8u(ptr, seg.frg)
  	ptr = ikcp_encode16u(ptr, seg.wnd)
  	ptr = ikcp_encode32u(ptr, seg.ts)
  	ptr = ikcp_encode32u(ptr, seg.sn)
  	ptr = ikcp_encode32u(ptr, seg.una)
  	ptr = ikcp_encode32u(ptr, uint32(len(seg.data)))
  	atomic.AddUint64(&DefaultSnmp.OutSegs, 1)
  	return ptr
  }
docs: // encode a segment into buffer