> For the complete documentation index, see [llms.txt](https://aceld.gitbook.io/zinx/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://aceld.gitbook.io/zinx/wu-3001-zinx-de-xiao-xi-feng-zhuang/51-chuang-jian-xiao-xi-feng-zhuang-lei-xing.md).

# 5.1 创建消息封装类型

在`zinx/ziface/`下创建`imessage.go`文件

> zinx/ziface/imessage.go

```go
package ziface

/*
    将请求的一个消息封装到message中，定义抽象层接口
 */
type IMessage interface {
    GetDataLen() uint32    //获取消息数据段长度
    GetMsgId() uint32    //获取消息ID
    GetData() []byte    //获取消息内容

    SetMsgId(uint32)    //设计消息ID
    SetData([]byte)        //设计消息内容
    SetDataLen(uint32)    //设置消息数据段长度
}
```

同时创建实例message类，在`zinx/znet/`下，创建`message.go`文件

> zinx/znet/message.go

```go
package znet

type Message struct {
    Id      uint32 //消息的ID
    DataLen uint32 //消息的长度
    Data    []byte //消息的内容
}

//创建一个Message消息包
func NewMsgPackage(id uint32, data []byte) *Message {
    return &Message{
        Id:     id,
        DataLen: uint32(len(data)),
        Data:   data,
    }
}

//获取消息数据段长度
func (msg *Message) GetDataLen() uint32 {
    return msg.DataLen
}

//获取消息ID
func (msg *Message) GetMsgId() uint32 {
    return msg.Id
}

//获取消息内容
func (msg *Message) GetData() []byte {
    return msg.Data
}

//设置消息数据段长度
func (msg *Message) SetDataLen(len uint32) {
    msg.DataLen = len
}

//设计消息ID
func (msg *Message) SetMsgId(msgId uint32) {
    msg.Id = msgId
}

//设计消息内容
func (msg *Message) SetData(data []byte) {
    msg.Data = data
}
```

整理一个基本的message包，会包含**消息ID**，**数据**，**数据长度**三个成员，提供基本的setter和getter方法，目的是为了以后做封装优化的作用。同时也提供了一个创建一个message包的初始化方法`NewMegPackage`。
