Unmarshaling in eine Schnittstelle {} und anschließendes Durchführen einer Typzusicherung

Ich bekomme einstring durch ein rabbitmq Nachrichtensystem. Vor dem Absenden

Ich benutzejson.Marshal, konvertiere das Ergebnis instring und senden Sie durch rabbitmq.

Die Strukturen, die ich konvertiere und sende, können sein: (die Namen und die Größe der Strukturen wurden geändert, aber es sollte keine Rolle spielen)

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

ode

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

Die Nachricht geht perfekt als @ durstring und wird auf der anderen Seite gedruckt (einige Server)

Bis jetzt funktioniert alles. Jetzt versuche ich, sie wieder in ihre Strukturen umzuwandeln und die Typen zu behaupten.

er erste Versuch ist von:

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

Das funktioniert nicht. Beim Drucken der Art voninput nach dem Unmarshaling bekomme ichmap[string]interface{} (?!?)

und noch seltsamer als das, der Map-Schlüssel ist der String, den ich habe und der Map-Wert ist leer.

Ich habe einige andere Versuche gemacht wie:

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

und auch versucht, den Schalter zu schreiben, wie in dieser Antwort erklärt wurde:Golang: Schalter für Nicht-Schnittstellenwert kann nicht eingegeben werden

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

Noch ohne Erfolg ...

Irgendwelche Ideen

Antworten auf die Frage(4)

Ihre Antwort auf die Frage