type moHeader … type moStrPos … func encodeFile(f *File) []byte { … } // encode data and init moHeader func encodeData(hdr *moHeader, f *File) []byte { … } // must called after encodeData func encodeHeader(hdr *moHeader) []byte { … } func encodeMsgId(v Message) string { … } func encodeMsgStr(v Message) string { … }