Go strings are immutable sequences of bytes stored as a header containing a pointer to the data and a length. Because the data is immutable, operations like concatenation or substring extraction create new string headers pointing to new or existing byte slices rather than modifying the original.
s := "hello"
// s is a struct { ptr *byte; len int }
// s[0] is 'h', s[1] is 'e', etc.
// s = s + " world" creates a new string, leaving original "hello" unchanged