Unmarshaling в интерфейс {}, а затем выполняет утверждение типа

Я получаюstring через систему сообщений rabbitmq. Перед отправкой

я используюjson.Marshal, преобразовать результат вstring и отправить через rabbitmq.

Структуры, которые я конвертирую и отправляю, могут быть: (изменены имена и размер структур, но это не должно иметь значения)

type Somthing1 struct{
   Thing        string    `json:"thing"`
   OtherThing   int64     `json:"other_thing"`
}

или же

type Somthing2 struct{
   Croc        int       `json:"croc"`
   Odile       bool      `json:"odile"`
}

Сообщение проходит черезstring и напечатан на другой стороне (какой-то сервер)

До сих пор все работает. Теперь я пытаюсь преобразовать их обратно в их структуры и утверждать типы.

Первая попытка:

func typeAssert(msg string) {

 var input interface{}

 json.Unmarshal([]byte(msg), &input)

 switch input.(type){
 case Somthing1:
    job := Somthing1{}
    job = input.(Somthing1)
    queueResults(job)

  case Somthing2:
    stats := Somthing2{}
    stats = input.(Somthing2)
    queueStatsRes(stats)
 default:
}

Это не работает. При печати типinput после Unmarshaling это я получаюmap[string]interface{} (?!?)

и даже более странно, ключ карты - это строка, которую я получил, а значение карты пусто.

Я сделал несколько других попыток, таких как:

 func typeAssert(msg string) {

  var input interface{}

  json.Unmarshal([]byte(msg), &input)

  switch v := input.(type){
  case Somthing1:
    v = input.(Somthing1)
    queueResults(v)

   case Somthing2:
    v = input.(Somthing2)
    queueStatsRes(v)
  default:
}

а также попытался написать переключатель, как было объяснено в этом ответе:Golang: невозможно набрать переключатель на неинтерфейсном значении

switch v := interface{}(input).(type)

все еще безуспешно ...

Есть идеи?

Ответы на вопрос(2)

Ваш ответ на вопрос