Нет, Go не поддерживает литеральные типы (а-ля TypeScript). Более того, на самом деле не может из-за нулевых значений .
Каждый тип имеет нулевое значение , которое всегда существует, и ему можно присвоить всегда . Когда переменные типа объявляются, им неявно присваивается нулевое значение их типа.
Для целых чисел (int
, uint
, int32
, uint32
, int64
, uin64
) или с плавающей запятой (float32
, float64
) или сложных (complex64
или complex128
), это просто 0
(0.0
соответственно).
Для строковых типов это пустая строка ""
.
Для срезов, карт, указателей, каналов и интерфейсов нулевое значение равно nil
.
Для массивов (не слайсов: массивы являются типами значений со статически известной длиной); их нулевое значение - это просто нулевое значение типа элемента, повторяемое для заполнения каждого слота
Нулевым значением типа структуры является структура, все поля которой имеют нулевые значения
В любом случае, поскольку любой тип всегда может иметь нулевое значение, было бы несовместимо создавать тип, который допускает только любое конкретное ненулевое значение.
Лучшее значение, которое может представлять буквальный тип "foo"
, - это то, что значение равно либо "foo"
, либо нулевое значение ""
(и нет, Go в любом случае не поддерживает это).
Самое близкое, что вы сможете сделать - это объявление муравья const
или функция-получатель, которая, как правило, возвращает фиксированное значение вместо фактического поля.