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 是可以的
版权声明
未经授权,禁止转载本文章。
如需转载请保留原文链接并注明出处。即视为默认获得授权。
未保留原文链接未注明出处或删除链接将视为侵权,必追究法律责任!
本文原文链接: https://fiveyoboy.com/articles/go-compare-struct/
备用原文链接: https://blog.fiveyoboy.com/articles/go-compare-struct/