func Pack(tos int16, tbl interface{}, writer *Packet) []byte {
	if writer == nil {
		writer = Writer()
	}
	writer.WriteS16(tos)
	if tbl == nil {
		return writer.Data()
	}
	if fastpack, ok := tbl.(FastPack); ok {
		fastpack.Pack(writer)
		return writer.Data()
	}
	_pack(reflect.ValueOf(tbl), writer)
	return writer.Data()
}
export struct fields with packet writer.
package packet
import (
	"log"
	"reflect"
)
type FastPack interface {
	Pack(w *Packet)
}