В Go для сравнения кастомных (собственных) типов необходимо определить функцию сравнения для этого типа. Вполне достаточно реализовать интерфейс Comparer
, который содержит только один метод Compare() bool
. Поскольку в Go отсутствует перегрузка операторов, такой подход является наиболее гибким и эффективным.
Пример:
type MyType struct { value int // Дополнительные поля ... } // Реализуем интерфейс Comparer func (m MyType) Compare(other MyType) bool { return m.value == other.value } // Пример использования func main() { a := MyType{value: 10} b := MyType{value: 10} c := MyType{value: 20} fmt.Println(a.Compare(b)) // true fmt.Println(a.Compare(c)) // false }
В этом примере мы определили структуру MyType
с полем value
и реализовали метод Compare()
, который сравнивает значения наших объектов типа MyType
. Затем мы создаем несколько объектов MyType
и сравниваем их с помощью метода Compare()
. Ожидаемый результат будет выводиться на экран.
Если вам требуется сравнивать объекты двух разных типов, то логичнее будет определить отдельную функцию сравнения, которая будет принимать два разных типа в качестве аргументов и возвращать результат сравнения.
Пример:
type MyType struct { value int // Дополнительные поля ... } func CompareCustomTypes(a MyType, b AnotherType) bool { return a.value == b.value } // Пример использования func main() { m := MyType{value: 10} n := AnotherType{value: 10} fmt.Println(CompareCustomTypes(m, n)) // true }
В этом примере мы определили функцию CompareCustomTypes()
, которая принимает объекты двух разных типов (MyType
и AnotherType
) в качестве аргументов и сравнивает их значения. Это позволяет нам сравнивать объекты разных типов, используя специальную функцию сравнения.