Краткий ответ: потому что спецификация языка не позволяет этого.
Допустимые преобразования для непостоянных значений: Спецификация: Преобразования:
Непостоянное значение x
может быть преобразовано в тип T
в любом из следующих случаев:
x
- это , присваиваемое - T
. - игнорирование тегов структуры (см. Ниже), тип
x
и T
имеют идентичных базовых типов . - игнорирование тегов структуры (см. Ниже),
x
's type и T
являются типами указателей, которые не являются определенными типами , и их базовые типы указателей имеют идентичные базовые типы. Типы x
и T
оба являются целыми числамиили типы с плавающей запятой. Типы x
и T
являются сложными типами. x
- целое число или фрагмент байтов или рун, а T
-тип строки. x
- строка, а T
- фрагмент байтов или рун.
Более длинный ответэто:
Спецификация: Преобразования: преобразования в и из типа строки:
Преобразование целого числа со знаком или без знака встроковый тип возвращает строку, содержащую UTF-8 представление целого числа.Значения вне диапазона допустимых кодовых точек Unicode преобразуются в "\uFFFD"
.
Преобразование фрагмента байтов в строковый тип приводит к строке, последовательные байты которой являются элементами фрагмента.
Преобразование фрагмента рун в строковый тип дает строку, которая представляет собой объединение отдельных значений рун, преобразованных в строки.
Преобразование значения типа строки в тип фрагмента байтов дает фрагмент, последовательные элементы которого являются байтами строки.
Преобразование значениятип строки для фрагмента типа рун дает фрагмент, содержащий отдельные кодовые точки Unicode строки.
Преобразование string
в []byte
«полезный», потому что это последовательность байтов текста в кодировке UTF-8, именно так Go хранит строки в памяти, и обычно это данные, которые вы должны хранить / передавать для доставки байта string
over-потоков (таких как io.Writer
), и аналогично, это то, что вы можете получить из io.Reader
.
Преобразование string
в[]rune
также полезен, он приводит к символам (рунам) текста, так что вы можете легко просматривать / обрабатывать символы string
(что часто требуется в реальных приложениях).
Преобразование string
в []int8
не очень полезно, поскольку потоки байтов работают на byte
с (что является псевдонимом uint8
, а не int8
).Если в конкретном случае вам нужен []int8
из string
, вы можете написать свой собственный конвертер (который, скорее всего, преобразует отдельные байты строки в значения int8
).