Псевдонимы generic-типов
Сначала напоминалка: псевдоним типа (type alias) в Go создает синоним для типа, не создавая новый тип.
Когда тип определен на основе другого типа, типы отличаются:
type ID int
var n int = 10
var id ID = 10
id = ID(n)
fmt.Printf("id is %T\n", id)
id is main.ID
Когда тип объявлен как псевдоним другого типа, типы остаются одинаковыми:
type ID = int
var n int = 10
var id ID = 10
id = n // works fine
fmt.Printf("id is %T\n", id)
id is int
Go 1.24 поддерживает generic-псевдонимы типов: псевдоним типа может быть параметризован, как и определенный тип.
Например, можно определить Set
как generic-псевдоним для map
с логическими значениями (не то чтобы это было сильно полезно, но):
type Set[T comparable] = map[T]bool
set := Set[string]{"one": true, "two": true}
fmt.Println("'one' in set:", set["one"])
fmt.Println("'six' in set:", set["six"])
fmt.Printf("set is %T\n", set)
'one' in set: true
'six' in set: false
Set is map[string]bool
Вполне возможно, что вы никогда не использовали обычные псевдонимы, и не будете использовать generic-псевдонимы. Но нужно же было пополнить вашу копилку бесполезных знаний :)
★ Подписывайтесь на новые заметки.