go struct interface 能否比较
在golang中可比较的类型有int,string,bool,pointer,channel,interface,array
不可比较的类型有slice,map,func
go struct 能否比较
case 1 同一个struct的不同实例能否比较,是否相同,未知,直接上code测试

可见同一个struct的不同实例不但可以比较,而且还相同(返回true)
case 2 同一个struct的不同实例,赋值不同,是否可以比较,结果是否相同,上code测试

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

直接报错,提示不能比较
总结
struct可以比较,但是如果实例的赋值不同,则不相等,如果struct中包含不可比较类型,则是无法比较的,会报错
go interface 能否比较
众所周知,interface是一组方法签名的集合,go官方说是可以比较的,我们存在的疑问是同一个interface的不同实例是否相等
package main
import "fmt"
type People interface {
name(name string)
age(age int)
}
type Student struct {
score uint
}
type Teacher struct {
score uint
}
func (s *Student) name(nm string) {
fmt.Println("Student name is %s ", nm)
}
func (s *Student) age(age int) {
fmt.Println("Student age is ", age)
}
func (t *Teacher) name(nm string) {
fmt.Println("Teacher name is ", nm)
}
func (t *Teacher) age(age int) {
fmt.Println("Teacher age is ", age)
}
// 定义interface变量
var conn People
func GetStudentConn() People {
conn = &Student{score: 100}
return conn
}
func GetTeacherConn() People {
conn = &Teacher{score: 100}
return conn
}
func main() {
stuConn := GetStudentConn()
stuConn.age(100)
teaConn := GetTeacherConn()
teaConn.name("tea")
fmt.Println(stuConn == teaConn)
}
复制代码
interface的不同实例可以比较,就算值相同,结果也不相同。返回false。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END























![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)