package main

import "fmt"

func main() {
	sn1 := struct {
		age  int
		name string
	}{age: 11, name: "qq"}
	sn2 := struct {
		age  int
		name string
	}{age: 11, name: "qq"}
	if sn1 == sn2 {
		fmt.Println("sn1 == sn2")
	}

	sm01 := struct {
		age int
		m   map[string]string
	}{age: 11, m: map[string]string{"a": "1"}}
	sm02 := struct {
		age int
		m   map[string]string
	}{age: 11, m: map[string]string{"a": "1"}}
	
	if sm01 == sm02 {
		fmt.Println("sm01 == sm02")
	}
}

编译不通过

root@debiancc:~/www/test# go run test.go 
# command-line-arguments
./test.go:26:5: invalid operation: sm01 == sm02 (struct containing map[string]string cannot be compared)
root@debiancc:~/www/test# 

参考解析:这道题目考的是结构体的比较:

1.结构体只能比较是否相等,但是不能比较大小。

2.相同类型的结构体才能够进行比较,结构体是否相同不但与属性类型有关,还与属性顺序相关。以下 sm1 与 sm2 就是不同的结构体;


3. 如果 struct 的所有成员都可以比较,则该 struct 就可以通过 == 或 != 进行比较是否相等,比较时逐个项进行比较,如果每一项都相等,则两个结构体才相等,否则不相等;