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

Функция reflect.DeepEqual

Функция reflect.DeepEqual выполняет глубокое сравнение двух значений произвольных типов. Она возвращает true, если значения глубоко равны, и false в противном случае. Первым параметром функция принимает первое значение для сравнения, вторым параметром — второе значение. В отличие от оператора ==, DeepEqual рекурсивно обходит составные структуры данных, сравнивая их элементы.

Синтаксис

reflect.DeepEqual(a, b)

Пример

Давайте сравним два слайса с одинаковыми элементами:

package main import ( "fmt" "reflect" ) func main() { s1 := []int{1, 2, 3, 4, 5} s2 := []int{1, 2, 3, 4, 5} res := reflect.DeepEqual(s1, s2) fmt.Println(res) }

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

true

Пример

Давайте сравним две структуры с одинаковыми полями:

package main import ( "fmt" "reflect" ) type Person struct { Name string Age int } func main() { p1 := Person{Name: "John", Age: 30} p2 := Person{Name: "John", Age: 30} res := reflect.DeepEqual(p1, p2) fmt.Println(res) }

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

true

Пример

Давайте сравним два слайса с разными элементами:

package main import ( "fmt" "reflect" ) func main() { s1 := []int{1, 2, 3, 4, 5} s2 := []int{1, 2, 3, 4, 6} res := reflect.DeepEqual(s1, s2) fmt.Println(res) }

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

false

Пример

Давайте сравним два среза с разной длиной:

package main import ( "fmt" "reflect" ) func main() { s1 := []string{"a", "b", "c", "d", "e"} s2 := []string{"a", "b", "c"} res := reflect.DeepEqual(s1, s2) fmt.Println(res) }

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

false

Пример

Давайте сравним две карты с одинаковыми парами ключ-значение:

package main import ( "fmt" "reflect" ) func main() { m1 := map[string]int{"a": 1, "b": 2, "c": 3} m2 := map[string]int{"a": 1, "b": 2, "c": 3} res := reflect.DeepEqual(m1, m2) fmt.Println(res) }

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

true

Пример

Давайте сравним две вложенные структуры:

package main import ( "fmt" "reflect" ) type Address struct { City string Country string } type Employee struct { Name string Age int Address Address } func main() { e1 := Employee{ Name: "Alice", Age: 25, Address: Address{ City: "Moscow", Country: "Russia", }, } e2 := Employee{ Name: "Alice", Age: 25, Address: Address{ City: "Moscow", Country: "Russia", }, } res := reflect.DeepEqual(e1, e2) fmt.Println(res) }

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

true

Пример

Давайте сравним два указателя на одну и ту же переменную:

package main import ( "fmt" "reflect" ) func main() { x := 42 p1 := &x p2 := &x res := reflect.DeepEqual(p1, p2) fmt.Println(res) }

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

true

Пример

Давайте сравним два указателя на разные переменные с одинаковым значением:

package main import ( "fmt" "reflect" ) func main() { x := 42 y := 42 p1 := &x p2 := &y res := reflect.DeepEqual(p1, p2) fmt.Println(res) }

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

false

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

  • функцию reflect.TypeOf,
    которая возвращает тип переменной
  • функцию reflect.ValueOf,
    которая возвращает значение переменной в виде reflect.Value
  • тип reflect.Value,
    предоставляющий методы для работы со значениями
  • функцию reflect.Copy,
    которая копирует элементы из одного слайса в другой
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить