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

iG_TheShy · · 1265 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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是一组方法签名的集合,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。


有疑问加站长微信联系(非本文作者)

本文来自:掘金

感谢作者:iG_TheShy

查看原文:go struct,interface能否比较(TX面试题)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1265 次点击  ∙  1 赞  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传