Thank's very much, I got something.
The code you write will panic for nil map. I think you want to write make(map[string]int), then that code will print 42, so a map is really a pointer to a data struct. And a nil map M1 is a nil pointer, if we do M2 := M1, M1 M2 will both hold the same pointer nil. Without the special nil map rule, M1["string"] = 42 will change M1's pointer, and M2 still holds the nil pointer, that will confuse people, so they choose panic.
I think that might be the reason, thanks very much!