• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

GO语言中结构体的(==和!=)比较

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

GO语言中结构体的比较

1. 同一个struct的两个实例能用 == 或 != 来进行比较吗

答案:可以能,也可以不能

如果结构体内的所有成员变量都是可以比较的,那么结构体就可以进行比较。

如果结构体中存在不可以比较的成员变量那么结构体就不能进行比较。

那么哪些数据类型是可以比较的呢?

1. 简单类型

2. 可排序的数据类型

1. 整型
2. 浮点型
3. 字符串

3. 其他可比较类型

Boolean
Complex
Pointer
Channel     // 注意Channel 是可以进行比较的
Interface   // 接口
Array   

不可比较类型

Slice 
Map
Function

可比较的结构体例子

package main

import "fmt"

type User struct {
	a int
}

func main() {
	a := User{a:1}
	b := User{a:1}
	c := User{a:2}

	fmt.Println(a == b) // true
	fmt.Println(b == c) // false
}

加入不可比较的复杂类型

type People struct {
	name   string
	m      map[int]int
	weight int
}

func CantNotComparable() {
	p1 := People{
		name:   "wang",
		m:      make(map[int]int),
		weight: 0,
	}
	p2 := People{
		name:   "wang",
		m:      make(map[int]int),
		weight: 0,
	}
	fmt.Println(p1 == p2)  // 此时编译器会直接显示错误 无法编译通过
}

如果此时其改为指向结构体的指针,此时报错提示会取消,因为此时实际上相当于在比较两个指针类型的变量

func CantNotComparable() {
	p1 := &People{
		name:   "wang",
		m:      make(map[int]int),
		weight: 0,
	}
	p2 := &People{
		name:   "wang",
		m:      make(map[int]int),
		weight: 0,
	}
	fmt.Println(&p1, &p2)
	fmt.Println(p1 == p2)
}

2. 两个不同的struct的实例能不能比较 == !=

答案:可以能,也可以不能

如果想要比较两个不同的struct的实例的话,需要先进行结构类型的转换
转换成同一个结构类型才可以进行比较

结构体之间进行转换需要他们具备完全相同的成员(字段名、字段类型、字段个数)
func CantNotComparable() {
	p1 := People{
		name:   "wang",
		weight: 0,
	}
	p2 := User{
		name:   "wang",
		weight: 1,
	}
	p3 := People(p2)  // 进行结构体转换
	fmt.Println(p1 == p3)
}

参考内容

https://blog.csdn.net/jcetpoor/article/details/108946530

https://blog.csdn.net/daima_caigou/article/details/91418969


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
ggplot2绘制GO富集分析柱状图发布时间:2022-07-10
下一篇:
Go 源码学习之--net/http发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap