Сравнение структур
В Go структуры можно сравнивать с помощью операторов
== и !=. Оператор == возвращает
true, если все соответствующие поля двух структур
равны, и false в противном случае. Оператор
!= работает противоположным образом. Сравнивать
можно только структуры одинакового типа. Важно, что
сравнение возможно только если все поля структуры
являются сравниваемыми типами (такими как числа,
строки, булевы значения, указатели, каналы и интерфейсы).
Синтаксис
struct1 == struct2
struct1 != struct2
Пример
Давайте создадим две структуры с одинаковыми значениями полей и сравним их:
package main
import "fmt"
type Person struct {
name string
age int
}
func main() {
p1 := Person{name: "John", age: 30}
p2 := Person{name: "John", age: 30}
res := p1 == p2
fmt.Println(res)
}
Результат выполнения кода:
true
Пример
Теперь создадим две структуры с разными значениями полей и сравним их:
package main
import "fmt"
type Person struct {
name string
age int
}
func main() {
p1 := Person{name: "John", age: 30}
p2 := Person{name: "Jane", age: 25}
res := p1 == p2
fmt.Println(res)
}
Результат выполнения кода:
false
Пример
Структуры с несравниваемыми полями (например, слайсами)
нельзя сравнивать с помощью ==:
package main
type Data struct {
numbers []int
}
func main() {
d1 := Data{numbers: []int{1, 2, 3}}
d2 := Data{numbers: []int{1, 2, 3}}
// Ошибка компиляции: слайсы нельзя сравнивать
res := d1 == d2
_ = res
}
Результат выполнения кода:
"cannot compare d1 == d2 (struct containing []int cannot be compared)"
Пример
Для сравнения структур с несравниваемыми полями можно
использовать пакет reflect:
package main
import (
"fmt"
"reflect"
)
type Data struct {
numbers []int
}
func main() {
d1 := Data{numbers: []int{1, 2, 3}}
d2 := Data{numbers: []int{1, 2, 3}}
res := reflect.DeepEqual(d1, d2)
fmt.Println(res)
}
Результат выполнения кода:
true
Смотрите также
-
описание
структур,
основы работы с составными типами данных -
доступ к
полям структуры,
чтение и запись значений полей -
методы
структур,
привязка функций к типам -
встраивание
структур,
композиция и переиспользование кода