golang 相同結構體比較方式比較
阿新 • • 發佈:2021-12-24
golang 相同結構體比較方式比較
使用==
示例:
type Student struct { Name string Age int } type Class struct { Name string } func main() { s1 := Student{ Name: "ysm", Age: 23, } s2 := Student{ Name: "ysm", Age: 23, } if s1 == s2 { log.Println("這兩個值相同") } else { log.Println("這兩個值不相同") } } # 輸出:這兩個值相同
缺點:如果結構體中有指標型別,就不能夠進行比較。因為對於指標型別的比較是比較地址,不是比較指標指向的內容
示例:
type Student struct { Name string Age int C *Class } type Class struct { Name string } func main() { s1 := Student{ Name: "ysm", Age: 23, C: &Class{ Name: "3班", }, } s2 := Student{ Name: "ysm", Age: 23, C: &Class{ Name: "3班", }, } if s1 == s2 { log.Println("這兩個值相同") } else { log.Println("這兩個值不相同") } } # 輸出:這兩個值不相同
使用reflect.DeepEqual
示例:
type Student struct { Name string Age int C *Class } type Class struct { Name string } func main() { s1 := Student{ Name: "ysm", Age: 23, C: &Class{ Name: "3班", }, } s2 := Student{ Name: "ysm", Age: 23, C: &Class{ Name: "3班", }, } if reflect.DeepEqual(s1, s2) { log.Println("這兩個值相同") } else { log.Println("這兩個值不相同") } } # 輸出:這兩個值相同
原因:使用reflect.DeepEqual是進行值比較
缺點:執行時間慢