Given these two tests:
func TestEqualWhat(t *testing.T) { testMarshalUnmarshal(t, map[string]interface{}{"a":"b"}) testMarshalUnmarshal(t, map[string]interface{}{"a":5}) }
Where the testMarshalUnmarshal helper just marshals json and returns:
func testMarshalUnmarshal(t *testing.T, in map[string]interface{}) { //marshal the object to a string jsb, err := json.Marshal(in); if err != nil { log.Printf("Unable to marshal msg") t.FailNow() } //unmarshal to a map res := make(map[string]interface{}) if err := json.Unmarshal(jsb, &res); err != nil { t.FailNow() } if !reflect.DeepEqual(in, res) { log.Printf("\nExpected %#v\nbut got %#v", in, res) t.FailNow() } }
Why does the first test case fail and the second fail? The test result is as follows:
Expected map[string]interface {}{"a":5} but got map[string]interface {}{"a":5} --- FAIL: TestEqualWhat (0.00 seconds)
Here is a similar code on the go playground so you can easily crack it.
llimllib
source share