package entity import ( "context" ) // 定义枚举类型 type MessageType int type ContentType int const ( PlatformMessage MessageType = iota WeChatMessage ShortNoteMessage ) const ( WeChatTemplateMessage ContentType = iota ) type Message struct { MsgType MessageType ContentType ContentType Body interface{} `json:"body"` } func NewWechatTemplateMessage(fields map[string]interface{}) *Message { return &Message{ MsgType: WeChatMessage, ContentType: WeChatTemplateMessage, Body: fields, } } type Msg interface{ Do(ctx context.Context) error } type MsgReq struct{ body Message sender User receiver User } type PlatformMsgReq struct{ MsgReq } func (m *MsgReq) Do(ctx context.Context) error { // 方法实现 return nil } func(this *PlatformMsgReq) Do(ctx context.Context) error{ return nil } type WeChatMsgReq struct{ MsgReq } func(this *WeChatMsgReq) Do(ctx context.Context) error{ w := NewWeChatOfficial("classPushOfficial") err := w.PushMessage(ctx,this) if err != nil { return err } return nil } func NewWeChatMsgReq(fields map[string]interface{},msgType ContentType,sender User,receiver User) *WeChatMsgReq{ return &WeChatMsgReq{ MsgReq{ body: Message{ MsgType: WeChatMessage, ContentType: msgType, Body: fields, }, sender: sender, receiver: receiver, }, } } type ShortNoteMsgReq struct{ MsgReq } func(this *ShortNoteMsgReq) Do(ctx context.Context) error{ return nil } func NewShortNoteMsgReq(body map[string]interface{},msgType ContentType,sender User,receiver User) *ShortNoteMsgReq{ return nil }