code: func (p *Processor) Register(msg interface{}) string {
  	msgType := reflect.TypeOf(msg)
  	if msgType == nil || msgType.Kind() != reflect.Ptr {
  		log.Fatal("json message pointer required")
  	}
  	msgID := msgType.Elem().Name()
  	if msgID == "" {
  		log.Fatal("unnamed json message")
  	}
  	if _, ok := p.msgInfo[msgID]; ok {
  		log.Fatal("message %v is already registered", msgID)
  	}
  
  	i := new(MsgInfo)
  	i.msgType = msgType
  	p.msgInfo[msgID] = i
  	return msgID
  }
docs: // It's dangerous to call the method on routing or marshaling (unmarshaling)