why slice values can sometimes go stale but never map values?
I find that slice map function and channel are frequently mentioned together as reference types . However I notice that slices somethings exhibit none reference behavior like they can go stale: var s []int //must update slice value s = append(s, ...) or //must use pointer if we want to expose the change func foo(s *[]int) error //or change the function signature to return it like _append_ func foo(s []int) (r slice, err error) Usually I understand this by keeping the inner components of the slice discriptor implementation in mind: A slice value can be seen as a struct of len, cap and data