РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
50 of 1593 menu

Тип comparable

Тип comparable — это встроенный интерфейс в Go, который обозначает множество типов, значения которых можно сравнивать с помощью операторов == и !=. Этот интерфейс часто используется в дженериках (обобщенном программировании) как ограничение для параметров типа, чтобы гарантировать, что тип поддерживает операции сравнения.

Синтаксис

Тип comparable используется как ограничение в объявлении обобщенных функций или типов.

func IsEqual[T comparable](a, b T) bool { return a == b }

Также тип comparable можно использовать в качестве типа параметра для проверки возможности сравнения.

Пример

Давайте создадим обобщенную функцию, которая проверяет, равны ли два значения любого сравниваемого типа:

package main import "fmt" func IsEqual[T comparable](a, b T) bool { return a == b } func main() { res1 := IsEqual(10, 10) fmt.Println(res1) res2 := IsEqual("abcde", "12345") fmt.Println(res2) res3 := IsEqual([]int{1, 2, 3}, []int{1, 2, 3}) fmt.Println(res3) }

Результат выполнения кода:

true false false

Обратите внимание, что слайсы не сравнимы, поэтому компилятор выдаст ошибку, если попытаться использовать comparable со слайсом.

Пример

Использование comparable в качестве ограничения для структуры данных, например, для множества (set):

package main import "fmt" type Set[T comparable] struct { elements map[T]bool } func NewSet[T comparable]() *Set[T] { return &Set[T]{elements: make(map[T]bool)} } func (s *Set[T]) Add(value T) { s.elements[value] = true } func (s *Set[T]) Contains(value T) bool { return s.elements[value] } func main() { intSet := NewSet[int]() intSet.Add(10) intSet.Add(20) fmt.Println(intSet.Contains(10)) fmt.Println(intSet.Contains(30)) strSet := NewSet[string]() strSet.Add("abcde") fmt.Println(strSet.Contains("abcde")) fmt.Println(strSet.Contains("xyz")) }

Результат выполнения кода:

true false true false

Смотрите также

  • тип any,
    который представляет собой пустой интерфейс и может хранить значения любого типа
  • тип string,
    который является сравниваемым типом и часто используется с comparable
  • тип int,
    который также поддерживает сравнение и может быть ограничением comparable
  • тип bool,
    который является сравниваемым типом и часто используется в логических операциях
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить