Ответ 1
Используйте range
.
x = "你好"
for _, c := range x {
// do something with c
}
Если вам нужен произвольный доступ, вам нужно будет использовать индексы единиц кода, а не индексы символов. К счастью, нет веских оснований для необходимости индексирования символов, поэтому индексы кодовых единиц прекрасны.
В большинстве языков есть одна и та же проблема. Например, Java и С# используют UTF-16, который также является кодировкой переменной длины (но некоторые люди притворяются, что это не так).
Подробнее о том, почему Go использует UTF-8, см. UTF-8 Manifesto.