首页 > 其他分享 >Go语言中的comparable接口:打通类型比较的通用之路

Go语言中的comparable接口:打通类型比较的通用之路

时间:2024-03-20 21:30:04浏览次数:23  
标签:comparable 泛型 Equal 接口 类型 Go

在Go语言中,comparable是一个内置的接口,它代表了所有可以进行比较的类型。这包括布尔型、数值型、字符串、指针、通道以及所有元素也是可比较类型的数组、其字段全为可比较类型的结构体。这意味着,如果一个类型的值可以使用==!=运算符进行比较,那么这个类型就实现了comparable接口。
在这里插入图片描述

comparable接口的特殊之处在于,它仅能作为类型参数的约束使用,而不能作为变量的类型。这是Go 1.18引入泛型后的一个特性,用于在泛型编程中指定只有可比较类型的泛型参数。

这个接口定义非常简洁,仅仅通过comparable自身来约束,没有显式声明任何方法:

type comparable interface { comparable }

这个定义的存在,允许我们在定义泛型类型或函数时,限制类型参数必须是可比较的。这对于需要进行相等性检查的算法或数据结构尤其重要。例如,我们可以创建一个工作于任何可比较键上的泛型map函数或数据结构,而不必担心键类型是否支持比较操作。

以下是一个简单示例,使用comparable作为类型参数约束来定义一个函数,该函数检查两个值是否相等:

package main

import "fmt"

// Equal 检查两个可比较类型的值是否相等
func Equal[T comparable](a, b T) bool {
    return a == b
}

func main() {
    fmt.Println(Equal(1, 1)) // 输出: true
    fmt.Println(Equal("hello", "world")) // 输出: false
}

在这个例子中,Equal函数可以接受任何实现了comparable接口的类型T的值,然后检查这两个值是否相等。这体现了Go泛型和comparable接口提供的灵活性和强大功能。

标签:comparable,泛型,Equal,接口,类型,Go
From: https://blog.csdn.net/qq_14829643/article/details/136854513

相关文章

  • 接口和抽象类的区别
    接口和抽象类的区别修饰的关键字不同:接口interface,抽象类abstractclass抽象类本质也是一个类,某个类只能只能继承一个抽象类(类的单继承),但可以实现多个接口抽象类只能继承于一个类,但接口可以继承多个接口(类单继承,接口多继承)抽象类中的可以有抽象方法和普通方法,接口中除了......
  • 接口性能指标-QPS-TPS-并发量
    1QPSQueriesPerSecond,每秒查询率,一台服务器每秒能够响应的查询次数。是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,即每秒的响应请求数,也即是最大吞吐能力如何估算自己项目的QPS?使用日志估算即可,比如在中间件里记录访问日志,最终统计1s内有多少个访问,q......
  • Go环境变量配置,及GOROOT、GOPATH的区别
    一、安装Gogo下载地址:https://golang.google.cn/dl/windows下载安装,有两种方式。解压和直接安装方式一:直接下载安装包。以.msi结尾的文件。例如:go1.22.1.windows-amd64.msi 下载后,双击后一直点下一步即可安装成功。方式二:下载压缩包文件,直接解压。解压后配置环境变量......
  • Java调用python服务接口https遇到证书问题的具体解决
    是这样的,大概前一段时间做过一个业务,一直没有记录下来就是我们的算法部,封装好了一系列的算法,然后是python写的。而我们需要用Java去调用他们的方法。如何处理这个问题呢就是我在python里面写了一个rest-api,暴露出几个接口,供Java这边调。但是不知道为什么算法部当时那边弄了个......
  • Web框架开发-Django-模板继承和静态文件配置
    一、模板继承目的:减少代码的冗余语法:123{%blockclassinfo%}{%endblock%}具体步骤:1、创建一个base.html文件2、把要显示的页面的内容写在这里面,也就是HTML要在浏览器显示的内容3、在rigth里面写一个盒子{%blockclassinfo%}{%endblock%}......
  • Web框架开发-Django-数据库表的单表查询
    一、添加表记录对于单表有两种方式方式一:12book_obj=models.Book(title="python全栈开发",price=100,publishData="2015-08-08",author='张三',publish='机械工业出版社')    book_obj.save()方式二:12#方式二:    models.Book.objec......
  • php 对接Unity海外广告平台收益接口Reporting API
    今天对接的是Unity广告reportingapi接口,拉取广告收益回来自己做统计。记录分享给大家首先是文档地址,进入到Unity后台就能看到文档地址以及参数:文档地址:https://docs.unity.com/ads/en-us/manual/MonetizationStatsAPI在这里插入图片描述接入这些第三方广告平台,流程基......
  • golang 运行时死锁排查和检测
    当运行的系统发生goroutine等待获取锁时间超过预期时,判定为发生了死锁。因目前代码中使用了一些公开的锁实例,调用链也比较长,对问题排查带来了很大困扰。为了便于问题排查,需要借助工具来实现。1.发生死锁的判定依据和原因1.1判定依据如下为使用Mutex锁产生的锁等待,并持续了2......
  • Go语言GOPATH是什么
    在Go语言中,GOPATH是一个环境变量,用于指定Go语言的工作空间路径。它是Go语言中一个重要的概念,用于管理和组织你的Go项目。GOPATH指定了Go语言的工作目录,它包含了三个重要的子目录:src、pkg和bin。这些子目录分别用于存放源代码文件、编译后的包文件和可执行文件。当你使用go......
  • 接口性能测试 —— Jmeter并发与持续性压测
    接口压测的方式:1、同时并发:设置线程组、执行时间、循环次数,这种方式可以控制接口请求的次数2、持续压测:设置线程组、循环次数,勾选“永远”,调度器(持续时间),这种方式可以控制压测周期时间指定并发数例1:设置线程数:10设置执行时间:0设置循环次数:5说明:使10个线程启动并同时运行也就......