Строка в Go — это immutable последовательность байт. Под капотом структура из указателя на данные и длины. Строки неизменяемые — нельзя поменять отдельный символ, только создать новую. Строковый литерал — это UTF-8 по умолчанию, но Go не гарантирует что строка — валидный UTF-8, она может содержать произвольные байты. Индексация s[i] возвращает байт, а не символ — для работы с символами нужны руны.