I don't really care if you want that. Everyone should know that that's just the way slices work. Nothing more nothing less.
I really don't give a damn about that, i just know how slices behave, because I learned the language. That's what you should do when you are programming with it (professionally)
For anyone interested, this article explains the fundamentals very well, imo: https://go.dev/blog/slices-intro
You really don't see why people would point a definition that changes underneath you out as a bad definition? They're not arguing the documentation is wrong.
Just like every PHP coder should know that the ternary operator associativity is backwards compared to every other language.
If you code in a language, then you should know what's bad about that language. That doesn't make those aspects not bad.
"Consistent" is necessary but not sufficient for "good".
If that's your argument then there are no bad design decisions for any language.
`append` always returns a new slice value
`func append(slice []Type, elems ...Type) []Type`
The only correct way to use append is something like `sl = append(sl, 1, 2, 3)`
`sl` is now a new slice value, as `append` always returns a new slice value. You must now pass the new slice value back to the user, and the user must use the new slice value. The user must not use the old slice value.
It's trivial to fix the "bug" in the article, once you actually understand what a slice value is: https://go.dev/play/p/JRMV_IuXcZ6
A slice is not the underlying array, and the underlying array is not the slice. A slice is just a box with 3 numbers.