struct
in Go?A struct
or structure in Go is a user-defined type. It helps with composing different types into a single unit.
type Employee struct {firstName stringsecondName stringid int}
In order to compare two structures, it is imperative that all struct
field types are comparable. If the variables being compared belong to different structures, then you will see a compilation error. Golang allows you to compare two structures if they are of the same type and contain the same values for all fields.
==
operatorDeepEqual()
Let’s use the structure defined above and see the two methods in action.
package mainimport ("fmt""reflect")type Employee struct {firstName stringsecondName stringid int}func main() {e1 := Employee {firstName: "Anjana",secondName: "Shankar",id: 1,}e2 := Employee {firstName: "Anjana",secondName: "Shankar",id: 1,}e3 := Employee {firstName: "Anjana",secondName: "Shan",id: 1,}fmt.Println("== Operator in practice")if e1 == e2 {fmt.Println("e1 == e2")} else {fmt.Println("e1 != e2")}if e2 == e3 {fmt.Println("e2 == e3")} else {fmt.Println("e2 != e3")}fmt.Println("DeepEqual() in practice")fmt.Println("Is e1 equal to e2 : ", reflect.DeepEqual(e1, e2))fmt.Println("Is e2 equal to e3 : ", reflect.DeepEqual(e2, e3))}
The ==
operator does a strict comparison, whereas the reflect.DeepEqual
method can help you compare the content of the element your pointers point to.
package mainimport ("fmt""reflect")type Employee struct {firstName stringsecondName stringid *int}func main() {id1 := 1id2 := 1id3 := 1e1 := Employee {firstName: "Anjana",secondName: "Shankar",id: &id1,}e2 := Employee {firstName: "Anjana",secondName: "Shankar",id: &id2,}e3 := Employee {firstName: "Anjana",secondName: "Shan",id: &id3,}fmt.Println("== Operator in practice")if e1 == e2 {fmt.Println("e1 == e2")} else {fmt.Println("e1 != e2")}if e2 == e3 {fmt.Println("e2 == e3")} else {fmt.Println("e2 != e3")}fmt.Println("DeepEqual() in practice")fmt.Println("Is e1 equal to e2 : ", reflect.DeepEqual(e1, e2))fmt.Println("Is e2 equal to e3 : ", reflect.DeepEqual(e2, e3))}