Что такое кодировки текста, например UTF-8 и UTF-16
Что проверяют
Различаете ли вы символ, кодовую точку и байт. В Go это не теория: строка там последовательность байт, и почти каждая ошибка с текстом растёт из подмены одного понятия другим.
Как отвечать
Кодировка это правило, по которому кодовые точки превращаются в байты. UTF-8 переменной длины, от одного до четырёх байт: латиница и управляющие символы занимают один байт, кириллица и почти вся европейская диакритика два, основные иероглифы три, эмодзи и редкие блоки четыре. Совместимость с ASCII байт в байт и есть причина её победы в вебе и в форматах обмена.
UTF-16 тоже переменной длины: два байта для базовой плоскости и четыре для остального через суррогатную пару. Добавляется порядок байт, то есть варианты с прямым и обратным порядком и метка в начале файла. Встречается она в основном там, где так исторически устроен системный интерфейс, и в экранировании вида \uXXXX.
Go добавляет конкретику: исходники и литералы в UTF-8, len возвращает байты, индексация даёт байт, range по строке декодирует руны, руна это int32, то есть кодовая точка, а некорректные байты превращаются в символ замены. Счёт символов делают через utf8.RuneCountInString, перевод в пары и обратно через пакет unicode/utf16.
Где спотыкаются
Называют UTF-16 фиксированной двухбайтовой кодировкой. Именно из этого заблуждения растут обрезанные суррогатные пары и потерянные эмодзи при переносе между системами.
Режут строку срезом по байтам и удивляются мусору на конце. Ограничение длины считают по рунам либо обрезают по границе, которую дают функции декодирования.
Путают кодировку с оформлением вывода: увидели вопросительные знаки и начинают перекодировать данные вслепую. Чаще данные целы, а получатель читает их как однобайтовую кодировку, и чинить надо соглашение на границе, иначе к битому тексту добавится ещё один слой.