0

0

基本 Golang - 相等比较

霞舞

霞舞

发布时间:2024-10-26 14:18:26

|

1006人浏览过

|

来源于dev.to

转载

基本 golang - 相等比较

这篇文章是我打算分享使用 golang 进行开发的基本知识系列的一部分。

使用 == 或 != 运算符的逻辑比较并没有太多神秘之处。或者你的代码比较值是否相同或不同。
但有一些重要的细节需要了解您所比较的内容。

类似的接口

首先要知道什么可以与这些运算符进行比较,最明显的地方是 go 文档:关于比较器的部分

另一个选择是查看可比较的接口,它是与 go 的泛型实现一起添加的,所有实现该接口的类型都是可比较的。

所以基本上go定义的所有原始类型都是可以比较的,比如:字符串、数字(int、float、complex)、bool。

复杂类型比较

某些类型具有可比较或不可比较的条件。这是以下情况:结构体、切片和通道。
只有当它们的元素也具有可比性时,它们才具有可比性。
有趣的是,go 在编译级别验证了这一点,帮助您避免运行时错误,例如:

//esse código compila e a comparação funciona:
func main() {
    test1 := struct {
        name       string
    }{}
    test2 := struct {
        name       string
    }{}
    if test1 == test2 {
        fmt.println("funciona")
    }
}

在上面的代码中,我创建了两个具有等效属性的结构,并且比较有效。

//esse código não compila
func main() {
    test1 := struct {
        name       string
        attributes map[string]string
    }{}
    test2 := struct {
        name       string
        attributes map[string]string
    }{}
    if test1 == test2 {
        fmt.println("cade?")
    }
}

此代码将无法编译,并出现无效操作错误。

立即学习go语言免费学习笔记(深入)”;

发生这种情况是因为 map 不是 go 中的可比较类型。

有关结构和映射的详细信息

能够使用 == 比较结构非常方便,因为这些是我们自定义建模的类型。
但即使使用不可比较的类型,也有一些方法可以简化代码,并且了解这一点将使您免于编写非常无聊的条件。

好吧,让我们想象一下我们正在学校系统中工作,并且我们有以下不可比较的结构:

KeeShop网上商店
KeeShop网上商店

KeeShop是一款完全开源免费的网上独立建店系统,由专门的技术团队开发维护,定期根据用户的需求反馈,推出新的功能,用户也可以根据自已商城的需求,定制相关功能,增加自已商店的特色功能 KeeShop功能上基本完全可以满足各类网店的需求,每一个功能,都设身处地为各个商家着想,尽可能做到较高的易用性KeeShop基于php5+mysql5,安装容易,一分钟就可以搭起专业的电子商务网站内容管理:文章管理

下载
type student struct {
    id         int
    name       string
    age        int
    course     string
    attributes map[string]string
}

好的一点是,这个结构体有一个 id 字段,如果您正在处理持久数据,这会变得更加容易。

现在想象一下,如果您正在处理仍然瞬态的数据,例如,如果您正在读取文件并且需要在保留此数据之前进行某种类型的处理。

您始终可以选择逐个字段进行比较,这一点都不方便,但它确实有效。但您可以按如下方式使用结构组合:

func main() {
    type identity struct {
        name   string
        age    int
        course string
    }
    type student struct {
        id int
        identity
        attributes map[string]string
    }

    s1 := student{
        identity: identity{
            name:   "chuck",
            age:    10,
            course: "golang",
        },
        attributes: map[string]string{
            "last_score": "10",
        },
    }
    s2 := student{
        identity: identity{
            name:   "chuck",
            age:    10,
            course: "golang",
        },
        attributes: map[string]string{
            "last_score": "20",
        },
    }

    s3 := student{
        identity: identity{
            name:   "chuck",
            age:    12,
            course: "golang",
        },
        attributes: map[string]string{
            "last_score": "20",
        },
    }

    if s1.identity == s2.identity {
        fmt.println("achou", s1)
    }

    if s1.identity != s3.identity {
        fmt.println("não achou")
    }
}

此代码的替代方法是创建如下条件:

    if s1.name == s2.name && s1.age == s2.age && s1.course == s2.course {
        fmt.Println("Achou", s1)
    }

您可以将其提取到一个函数中,以减少混乱,但您仍然需要维护这些比较。

充分利用组合,这可以极大地简化你的代码!

概括

  • 了解类似的界面
  • 原始类型是可比较的
  • 复杂类型可能具有可比性,也可能不具有可比性
  • 利用组合来发挥你的优势。

相关专题

更多
golang如何定义变量
golang如何定义变量

golang定义变量的方法:1、声明变量并赋予初始值“var age int =值”;2、声明变量但不赋初始值“var age int”;3、使用短变量声明“age :=值”等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

178

2024.02.23

golang有哪些数据转换方法
golang有哪些数据转换方法

golang数据转换方法:1、类型转换操作符;2、类型断言;3、字符串和数字之间的转换;4、JSON序列化和反序列化;5、使用标准库进行数据转换;6、使用第三方库进行数据转换;7、自定义数据转换函数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

226

2024.02.23

golang常用库有哪些
golang常用库有哪些

golang常用库有:1、标准库;2、字符串处理库;3、网络库;4、加密库;5、压缩库;6、xml和json解析库;7、日期和时间库;8、数据库操作库;9、文件操作库;10、图像处理库。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

337

2024.02.23

golang和python的区别是什么
golang和python的区别是什么

golang和python的区别是:1、golang是一种编译型语言,而python是一种解释型语言;2、golang天生支持并发编程,而python对并发与并行的支持相对较弱等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

208

2024.03.05

golang是免费的吗
golang是免费的吗

golang是免费的。golang是google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的开源编程语言,采用bsd开源协议。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

391

2024.05.21

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

196

2025.06.09

golang相关判断方法
golang相关判断方法

本专题整合了golang相关判断方法,想了解更详细的相关内容,请阅读下面的文章。

191

2025.06.10

golang数组使用方法
golang数组使用方法

本专题整合了golang数组用法,想了解更多的相关内容,请阅读专题下面的文章。

192

2025.06.17

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

2

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
golang socket 编程
golang socket 编程

共2课时 | 0.1万人学习

nginx浅谈
nginx浅谈

共15课时 | 0.8万人学习

golang和swoole核心底层分析
golang和swoole核心底层分析

共3课时 | 0.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号