我在试着理解/学习为什么我不能比较两个相同的网络.
从this post开始,如果两个接口属于相同的底层类型,并且该类型可以进行比较,则它们应该能够进行比较.在下面的示例中,基础类型是net.UDPAddr.它是一个包含字符串int和net.IP的 struct ,net.IP是[]byte的类型别名.
是不是因为分片IP不可比?即使它的类型、长度和内容都是相同的?
示例:
我在试着理解/学习为什么我不能比较两个相同的网络.
从this post开始,如果两个接口属于相同的底层类型,并且该类型可以进行比较,则它们应该能够进行比较.在下面的示例中,基础类型是net.UDPAddr.它是一个包含字符串int和net.IP的 struct ,net.IP是[]byte的类型别名.
是不是因为分片IP不可比?即使它的类型、长度和内容都是相同的?
示例:
您的示例将两次调用返回的值与net.ResolveUDPAddr
进行比较.但是,如果您考虑函数签名:
Func ResolveUDPAddr(网络,地址字符串)(*UDPAddr,Error)
您将注意到,您实际上是在比较两个指针;这两个指针是可比较的,但不会相等(您是在比较指针,而不是它所指向的值).
根据前go spec名:
Struct types are comparable if all their field types are comparable.
Slice, map, and function types are not comparable. However, as a special case, a slice, map, or function value may be compared to the predeclared identifier nil.
net.UDPAddr包含net.IP
,而net.IP
是[]byte
,因此不可比较.
把你的例子推广到This点可能会有帮助.