Desempacotando em uma Interface {} e Executando Afirmação de Tipo

Eu recebo umstring através de um sistema de mensagens rabbitmq. Antes de enviar,

eu usojson.Marshal, converta o resultado emstring e envie através do rabbitmq.

As estruturas que eu converto e envio podem ser: (alteraram os nomes e o tamanho das estruturas, mas isso não deve importar)

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

ou

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

A mensagem passa perfeitamente como umstring e é impresso do outro lado (algum servidor)

Até agora tudo funciona. Agora estou tentando convertê-los novamente em suas estruturas e afirmar os tipos.

primeira tentativa é:

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:
}

Isso não funciona. Ao imprimir o tipo deinput depois de desempacotar eu recebomap[string]interface{} (?!?)

e ainda mais estranho que isso, a chave do mapa é a string que recebi e o valor do mapa está vazio.

Eu fiz algumas outras tentativas como:

 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:
}

e também tentei escrever o switch como foi explicado nesta resposta:Golang: não é possível digitar switch no valor que não é da interface

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

ainda sem sucesso ...

Alguma ideia?

questionAnswers(2)

yourAnswerToTheQuestion