美文网首页Go语言编程
go关于数据类型以及数据类型比较的归纳

go关于数据类型以及数据类型比较的归纳

作者: DragonRat | 来源:发表于2021-08-27 19:06 被阅读0次

golang中数据类型分为4大类:1.基础类型:各种int,bool,string等,这种类型的比较没什么好说的,直接比较值。2.复合类型(又叫做聚合类型):数组和结构体,这种类型的比较是逐字段比较的。3.引用类型:slice,map,channel,还有指针,除了slice,剩下的都是通过地址来比较的。slice后面说。4.接口类型,interface。接口类型的值(称为接口值)其实由两部分组成,具体类型(即该接口存储的值的类型)和该类型的一个值。按照《go程序设计语言》的称谓,分别称为动态类型和动态值。接口类型的比较涉及这两部分的比较,只有当动态类型完全相同且动态值相等(动态值使用==比较),两个接口值才是相等的。
需要注意的是,由于下面两点原因,golang干脆规定,切片类型不可比较。1.切片是间接的类型,可以引用自身,有循环引用的问题(如切片[]interface{}中元素可以是任何类型,当然包括自己),实现深度比较难度较大,得不偿失。2.但是如果直接比较引用的话,与数组的行为不一致,容易造成混淆。
由于不可比较类型的存在,导致比较操作有一些出乎意料的地方:1.如果复合类型中有不可比较的类型,那么复合类型就不可比较。例如数组中的元素是切片类型,结构体中含有切片类型的字段等。2.如果接口值的动态值不可比较,那么直接比较会panic,如:
varainterface{}=[]int{1,2,3}
varbinterface{}=[]int{4,5,6}
fmt.Println(a==b)
//panic:runtimeerror:comparinguncomparabletype[]int
建议翻阅《go程序设计语言》一书的第四章《复合数据类型》和第七章《接口》,有比较详细的说明

相关文章

  • go关于数据类型以及数据类型比较的归纳

    golang中数据类型分为4大类:1.基础类型:各种int,bool,string等,这种类型的比较没什么好说的,...

  • 04-Go语言常量和变量

    Go数据类型 C语言的数据类型image GO语言数据类型image GO数据类型占用的内存空间image 注意点...

  • 02-Go语言常量和变量

    Go语言的数据类型 C语言的数据类型 Go语言的数据类型 Go语言各数据类型占用内存空间 Go语言中也可以使用si...

  • go语言slice数据类型的定义和使用

    这篇文章介绍go语言slice数据类型的定义,内部格式,以及如何声明和定义slice类型变量。 slice数据类型...

  • 三、数据类型和操作

    一、数据类型 Go支持的数据类型特别丰富,你可以在Go SDK/src/builtin/builtin.go 这个...

  • go 语言第一节课(2)

    go 语言数据类型

  • 第三章:Go语言基础数据类型

    1. Go语言数据类型 1.1 数据类型分类 Go语言数据类型大致可以分为两类基础类型,其中就包括了我们最常见的一...

  • Go语言第3天 - 常用数据类型

    以下内容部分参考自Go语言基础数据类型Go语言中的数组切片:特立独行的可变数组Go语言数据类型-数组Go标准容器之...

  • ==和equals的区别

    ==既可以比较基本数据类型也可以比较引用数据类型、当比较基本数据类型的时候就是比较值是否相等。当比较引用数据类型的...

  • Go-Struct

    自定义类型 类型别名 go 结构体 Go语言提供了一种自定义数据类型,可以封装多个基本数据类型,这种数据类型叫结构...

网友评论

    本文标题:go关于数据类型以及数据类型比较的归纳

    本文链接:https://www.haomeiwen.com/subject/qpzmiltx.html