Not exactly. Appending to a slice always creates a *new* slice value:
s2 := append(s1, v)
(Aside: the new slice may or may not share the same backing store as the original slice, depending on whether s1's backing is suitable or not. But s2 is always a new *value*)
It becomes clear when you realise that a slice value is really a hidden struct, in pseudo-code something like:
struct {
backing *T
cap int
len int
}
The zero slice value is this struct initialized to all zeros. This gives a null pointer (i.e. no backing store), and a zero cap and len.
There's very little you can do with this value, except determine that its length is zero.
Just like the zero slice, the zero map can be read from, and it returns len() of zero. Reading any key from it will return zero value.
Like the slice, the map is also a struct which contains a pointer. However for simplicity and efficiency reasons, you add to a map by mutating it, not by creating a new map. This means that the map must have been initialized, so that its internal pointer points to a valid data structure, before you can update it.
If you want appending to a map to work the same way as appending to a slice, you can wrap it yourself easily enough: