go struct,interface能否比较(TX面试题)

2,366 阅读1分钟

go struct interface 能否比较

在golang中可比较的类型有int,string,bool,pointer,channel,interface,array 不可比较的类型有slice,map,func

go struct 能否比较

case 1 同一个struct的不同实例能否比较,是否相同,未知,直接上code测试

2021-07-07_170333.png

可见同一个struct的不同实例不但可以比较,而且还相同(返回true)

case 2 同一个struct的不同实例,赋值不同,是否可以比较,结果是否相同,上code测试

2021-07-07_170837.png

可见赋值不同,比较结果也是不同的

case 3 struct中包含不可比较类型,结果是否相同,上code

2021-07-07_172022.png
直接报错,提示不能比较

总结

struct可以比较,但是如果实例的赋值不同,则不相等,如果struct中包含不可比较类型,则是无法比较的,会报错

go interface 能否比较

众所周知,interface是一组方法签名的集合,接口比较的时候,只有当这两个变量的动态类型,动态值都相等的时候才相等,可以用fmt.Printf("%T\n", w)打印变量的动态类型

package main

import "fmt"

type Stu struct {
   Name string
}

type StuInt interface{}

func main() {
   var stu1, stu2 StuInt = &Stu{"Tom"}, Stu{"Tom"}
   var stu3, stu4 StuInt = Stu{"Tom"}, Stu{"Tom"}
   fmt.Println(stu1 == stu2) // false
   fmt.Println(stu3 == stu4) // true
   fmt.Printf("%T : %T ",stu1,stu2) // *main.Stu : main.Stu
}

interface的不同实例可以比较,变量的动态类型和动态值都相等在相等