char
на самом деле просто цифры. Это однобайтовые целые числа. У вас есть int
s, у вас есть short
s, и у вас есть char
s.
Их числовое значение (которое вы можете наблюдать с помощью преобразования или продвижения в другой целочисленный тип, например int
, затем распечатайте его out) является, когда инициализируется из символьного литерала, часто ASCII-кодом глифа в этом литерале. Массив индексов под go повышен до int
, так что вы действительно используете int
s. Здесь нет магов c.
Идея, что char
s - это "символы", на самом деле не верна; просто многие функции форматирования / вывода обращаются с ними определенно так, что кажется, что они есть. «Символ» - это (по-разному) либо абстрактное понятие (например, символ Unicode U + 0056, который может быть представлен различными способами в зависимости от выбранной кодировки), либо форма глифа («буква A»); char
не предоставляет ни одну из этих частей информации (символ литерал вроде как делает, как описано выше). У него плохое имя, но оно исходит от старины.