I do not think in/out parameters are ugly. I find them to be a lot more elegant than the cudgel that is pointers.
Go's pointers are certainly BETTER than C++ pointers, but I don't think that immediately makes it better. BOTH languages have value and reference semantics, and BOTH languages use syntax to dogwhistle that to programmers.
Go pointers make references and values quite visible to the programmer, because in the real world it's not actually convenient to hide those details.