Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goSpGnTd 93 of 280 menu
◀ ▶

Исходный тип в Go

В объединении типов можно поставить знак перед именем базового типа. Такое ограничение берет и значения этого имени, и свои типы, у которых то же основание за кадром объявления.

Без знака перечисляют только само имя: свой тип поверх int под ограничение int не подходит, хотя в памяти лежит целое. Со знаком компилятор смотрит на исходный тип и пропускает второе имя или свой тип с тем же корнем.

Сравним ограничение только с int и с исходным int. На экране 5: значение Counter проходит в ShowAny, а в Show с ограничением без знака не собралось бы:

package main import "fmt" type Counter int type IntOnly interface { int } type IntUnderlying interface { ~int } func Show[T IntOnly](v T) { fmt.Println(v) } func ShowAny[T IntUnderlying](v T) { fmt.Println(v) } func main() { ShowAny(Counter(5)) }

Объявите свой тип поверх int64, ограничение с ~int64, функцию печати параметра и выведите значение своего типа 12.

Дан следующий код:

type Score int type Plain interface { int } func F[T Plain](v T) {}

Скажите, можно ли передать Score в F без преобразования.

Замените в ограничении Plain запись int на вариант с исходным int, передайте Score со значением 3 в F и выведите число через тело функции.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить