Go 可比较类型

Go 可比较类型

分类

在 Go 语言中,可比较类型指的是可以使用相等运算符 == 和不等运算符 != 进行比较的类型。可比较类型包括:

  1. 布尔类型 bool
  2. 数字类型:整数类型(int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64)、浮点数类型(float32, float64)、复数类型(complex64, complex128)
  3. 字符串类型 string
  4. 指针类型 *TT 可比较)
  5. 通道类型 chan TT 可比较)
  6. 接口类型 interface{}(底层类型可比较)
  7. 数组类型 [n]TT 可比较,n 为常量表达式)
  8. 结构体类型 struct{...}(其所有字段均可比较)

注意,如果一个类型包含不可比较的类型,则它本身也不是可比较类型。例如,切片类型 []T 中的元素类型 T 如果不是可比较类型,则切片类型也不是可比较类型。同样,包含不可比较类型的结构体类型也不是可比较类型。


什么情况下interface为可比较的?

在Go语言中,interface类型是可以进行比较的,但需要满足一定的条件才能进行比较。可以比较的interface需要满足以下两个条件:

  1. 接口值的动态类型相同: 两个interface值可以进行比较的前提是它们的动态类型相同。也就是说,两个interface值都是由相同的具体类型实现的。如果两个interface值的动态类型不同,它们无法进行直接比较。
  2. 接口值的动态值相等: 接口值的动态值是指interface持有的具体值。两个interface值可以进行比较的另一个前提是它们的动态值相等。在比较时,实际上是在比较接口持有的底层具体值是否相等。

示例:

package main

import "fmt"

type Person struct {
   
    Name string
    Age  int
}

func main() {
   
    var p1, p2 interface{
   }
    p1 = Person{
   Name: "Alice", Age: 30}
    p2 = Person{
   Name: "Alice", Age: 30}

    fmt.Println
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值