Сравните две структуры, такие как массив в golang

Я пытаюсь сравнить 2 структуры типа массива в Golang, чтобы узнать, равна ли структура 1, полученная из веб-скраппинга, структуре 2, которая представляет собой данные, извлеченные из базы данных. Я думал, что это способ узнать, произошли ли изменения между внешней сетью и моей базой данных.

Структуры:

type Exchange struct {
    Name          string    `gorm:"Column:name" json:"name"`
    Buy           float64   `gorm:"Column:buy" json:"buy"`
    Sell          float64   `gorm:"Column:sell" json:"sell"`
}

Результат после консультации от слома:

&[{Dólar 38.5  41 } {Euro 38.82  43.57 } {P. Argentino 0.05  0.35 } {Real 6.95  8.95 }]

Из Интернета

&[{Dólar 38.5 41} {Euro 38.82 43.57} {P. Argentino 0.05 0.35} {Real 6.95 8.95}]

Мой код:

    fmt.Println(exchanges)
    dbExchanges := getExchangesFromDB()
    fmt.Println(dbExchanges)
    if exchanges == dbExchanges {
        fmt.Println("is equal")
    } else {
        fmt.Println("no is equal")
    }

    fmt.Println("Struct equal: ", reflect.DeepEqual(exchanges, dbExchanges))

Результат: нет равно

Структура равна: false

Можете ли вы пояснить, что не так с вашим кодом и как бы вы хотели, чтобы он вел себя по-другому? Два примера, которыми вы поделились, не совпадают, и результат вашего кода говорит, что они не совпадают. Я неправильно понял? Создание примера на go.dev/play может быть полезным. Спасибо

icio 19.11.2022 00:55

Спасибо @icio, мне нужно сравнить обе стойки для возврата, если они равны или нет.

user3058963 19.11.2022 01:10

Я не могу понять, почему они не одинаковы

user3058963 19.11.2022 01:15

Сравнивать структуры в Go просто. Похоже, вы сравниваете указатели с фрагментами структур, что не так.

Hymns For Disco 19.11.2022 01:24

Я проголосовал за то, чтобы закрыть ответ, потому что это «опечатка», хотя она и преувеличивает значение опечатки, но я думаю, что этот вопрос не имеет большого значения для будущих пользователей stackoverflow. Значения являются указателями на слайсы, а не на слайсы. Указатели сравниваются равными только тогда, когда они указывают на одно и то же значение. Решение состоит в том, чтобы ваш код (который не включен в вопрос) использовал срезы, а не указатели на срезы, или для сравнения для сравнения *exchanges и *dbExchanges.

Paul Hankin 19.11.2022 09:31
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
2
5
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Во-первых, если вы сравниваете адрес памяти двух переменных вместо их значений. Во втором предложении if (с использованием Reflect.DeepEqual) вы сравниваете их значения.

Другие вопросы по теме