Как реализовать сравнение кастомных типов в Go?

В 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) в качестве аргументов и сравнивает их значения. Это позволяет нам сравнивать объекты разных типов, используя специальную функцию сравнения.