Исходный тип в 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 и
выведите число через тело функции.