package omc import ( "errors" "fmt" "strings" ) type MsgBody struct { UID string RawData []byte MsgName string Msg map[string]string Keys []string } // Decode // reqLoginAlarm;user=yiy;key=qw#$@;type=msg func (o *MsgBody) Decode() error { multi := strings.Split(string(o.RawData), ";") if len(multi) < 1 { return errors.New("invalid msg body") } for i := 1; i < len(multi); i++ { m := strings.Split(multi[i], "=") if len(m) != 2 { return errors.New("invalid msg body") } o.Msg[m[0]] = m[1] } return nil } // Pack // reqLoginAlarm;user=yiy;key=qw#$@;type=msg func (o *MsgBody) Pack() error { var multi []string multi = append(multi, o.MsgName) for _, key := range o.Keys { item := fmt.Sprintf("%s=%s", key, o.Msg[key]) multi = append(multi, item) } raw := strings.Join(multi, ";") o.RawData = []byte(raw) return nil }