It’s how structs work in C though, and Go is spiritually very close to C, including explicit pointer types, address-taking and dereferencing.
Go’s String is a char* that behaves like a char[] when copied.
Uhh, no. A go string is (effectively) a pointer to an immutable string of characters. When you do a = b, both a and b point to the same string (i.e. each is its own string struct, containing a pointer to the exact same array of character data).
But if you try to get a byte[] from it, THEN it makes a copy.