So in your example, append may need to allocate, and the fact that it returns a new pointer makes that clear.
For the second example, you could use sort.Reverse, but the loop makes the cost of the operation clear.
The real problem is that without generics, such functions actually have to be written in the same fashion as sorting where you provide a function for reading and writing both, as opposed to just working--so the "simple" loops which are indeed error prone actually become less code, and we all use them instead. I highly, highly doubt even the best Google programmer will always get the boundary condition on that reverse a list loop right especially in an emergency or at 3 AM, and this is a very simple case where Go just can't abstract on par with anything-with-generics.
But my point is that you can meet the goal of not hiding operations just with good naming, if that's what you consider a terminal value of good pl design, and don't need to forego abstraction to do it.
For example compare inserting into a list in Python:
with apparently idiomatic Go: Or compare Python's `list.reverse()` to Go's recommendation: This seems quite error prone.Idiomatic Go taken from https://github.com/golang/go/wiki/SliceTricks