В Go (или «Golang») тип данных rune
представляет собой кодовую точку Unicode. Под капотом rune
является псевдонимом для int32
, так что каждый rune
фактически является числом, представляющим соответствующий символ Unicode.
Функция getNumberByRune
принимает символ Unicode (руну) в качестве входного параметра и преобразует его в целое число. В данной строке:
return int(digit — ‘0’)
происходит следующее:
1. digit
— это руна, которая представляет собой символ-цифру (например, ‘0’, ‘1’, ‘2’ и т.д.).
2. '0'
— это руна, представляющая символ ‘0’, который в Unicode имеет кодовую точку U+0030 (или 48 в десятичной системе).
3. Когда мы вычитаем '0'
(код 48) из digit
, мы фактически вычитаем числовое значение кодовой точки символа ‘0’ из числового значения кодовой точки символа, представленного digit
.
4. Так как в Unicode цифры от 0 до 9 идут подряд, вычитание значения ‘0’ из значения другой цифры даст нам их порядковый номер — то есть, если digit
— это руна ‘0’, результат будет 0; если digit
— это руна ‘1’, результат будет 1, и так далее до ‘9’, который даст результат 9.
Таким образом, этот код корректно преобразует символ-цифру, представленный руной, в соответствующее ему целое число. Приведение к типу int
в int(digit - '0')
обеспечивает, что результат будет представлен типом int
, который является наиболее распространенным целочисленным типом в Go и обычно используется для целых чисел, если не требуется специфический размер или знаковый диапазон.