go 的 struct 能不能比较以及能否作为 map 的 key
目录
go struct 能不能比较
-
值类型 - 结构体
-
- 相同类型
-
- 所有成员都可以比较,并且所有成员都相等才相等
-
- 只能比较是否相等,不能比较大小
type User struct { Name string Age int } func main() { var u1 = User{ Name: "test", Age: 1, } var u2 = User{ Name: "test", Age: 1, } var u3 = User{ Name: "test", Age: 2, } fmt.Println("u1=u2", u1 == u2) // true fmt.Println("u1=u3", u1 == u3) // false }
-
-
指针类型 - 结构体
-
相同类型
-
两个结构体指针指向同一个内存地址,则相等,否则不可比较
type User struct { Name string Age int } func main() { var u1 = &User{ Name: "test", Age: 1, } var u2 = &User{ Name: "test", Age: 1, } var u3 = u2 fmt.Println("u1=u2", u1 == u2) // false, 虽然值相同,但是指针地址不同 fmt.Println("u1=u3", u2 == u3) // true,指针地址相同 }
-
go struct 能否作为 map 的key
不管是指针类型还是值类型,都可以作为 map 的 key,
type User struct {
Name string
Age int
}
func main() {
var u = User{
Name: "test",
Age: 1,
}
var m = map[User]int{
u: 1,
}
fmt.Println("m:", m)
}
只要是可比较的类型都可以作为 map 的 key
slice 就不可以,因为 slice 是动态的,不可比较,但是数组 Array 是可以的