Are maps passed by value or reference in Go ?

It is always possible to define a function as following, but is this an overkill ?

```
func foo(dat *map[string]interface{}) {...}

```

Same question for return value. Should I return a pointer to the map, or return the map as value ? 

The intention is of course to avoid unnecessary data copy.