Ограничение сравнения в Go
Не каждый тип можно сравнивать на равенство
знаками == и !=. Ограничение
comparable отмечает типы, для
которых такое сравнение разрешено:
числа, строки, указатели, каналы, массивы
из сравнимых элементов и структуры из
сравнимых полей.
Ключ карты тоже должен быть сравнимым:
это то же правило, что стоит за
comparable. В обобщенной функции
ограничение подсказывает компилятору,
что внутри можно искать дубликаты или
проверять совпадение.
Напишем проверку равенства двух значений.
Сначала на экране true, затем
false:
package main
import "fmt"
func Equal[T comparable](a, b T) bool {
return a == b
}
func main() {
fmt.Println(Equal(1, 1))
fmt.Println(Equal("a", "b"))
}
Объявите Has с ограничением
сравнения, которая для среза и искомого
значения возвращает true, если
элемент есть, проверьте срез 1,
2, 3 и число 2.
Дан следующий код:
func Same[T comparable](a, b T) bool {
return a == b
}
Скажите, можно ли передать в Same
два среза строк.
Создайте карту с ключом строка и значением
целое, положите пару "x" и
1, затем прочитайте ключ через
обобщенную Equal с текстом
"x" и выведите результат сравнения
ключа с этим текстом.