# goprotocol **Repository Path**: raochq/goprotocol ## Basic Information - **Project Name**: goprotocol - **Description**: 用go编写想协议序列化 - **Primary Language**: Go - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-24 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # goprotocol 使用go编写的协议序列化和反序列的实现 - 考虑到兼容各个平台,数值类型不使用变长类型 int 和uint string必须小于65536 考虑到其他平台的支持情况,目前只支持一维数组和切片 会导所有成员的数据 允许将结构体中的数组改为切片,若将切片成员改为数组,或将原数组长度改小.可以正常解析,但会丢失数据 一旦数据结构确定,只能在最后追加成员,不允许删除成员,允许修改成员名字,但不允许私有成员和公有成员互相转换 不支持成员为unsafe.Pointer,*interface{}对象 不支持interface成员中存放结构体外的类型 切片或者数值中存放的是指针时,只允许存放指向已注册的结构体 ## 二进制内存结构 * 协议标记+协议id+数据长度(包含协议头) >+ 1. 数值类:直接写入对应的内存块(小端) >+ 2. 字符串:uft8编码长度(uint16)+ uft8编码内容 >+ 3. 数组: 数组长度(uint32)+ 内容 ## 结构体转二进制 >func Marshal(v interface{}) ([]byte, error) ## 二进制转结构体 >func Unmarshal(data []byte) (interface{}, error)