Вы можете сравнивать указатели людей, потому что reflect.DeepEqual()
также принимает, если указанные значения (глубоко) равны:
Значения указателя глубоко равны, если они равны, используя Go 's == operator или если они указывают на глубоко равные значения .
Так что просто выполните:
fmt.Printf("are variables equal: %v\n",
reflect.DeepEqual(unmarshalledPerson, &person))
Или разыменуйте *Person
указатель заключен внутрь unmarshalledPerson
, поэтому вы получите Person
структуру:
fmt.Printf("are variables equal: %v\n",
reflect.DeepEqual(*unmarshalledPerson.(*Person), person))
Оба отпечатка true
(попробуйте на Go игровой площадке ):
are variables equal: true
are variables equal: true
Также обратите внимание, что для вашей «простой» структуры вы можете использовать простое ==
сравнение:
*unmarshalledPerson.(*Person) == person
Этого не будет, если вы добавите другие поля, такие как указатели, структуры , maps et c.