Go中bool、整数、浮点、复数、string、uintptr及由它们构成的数组和结构体(字段全可比较)可直接用==/!=比较;slice、map、func不可比较;字符串逐字节比较,不归一化;结构体要求所有字段可比较;浮点数应避免==,改用误差范围判断。
== 和 != 比较Go 中只有「可比较类型」才能使用 == 或 !=。基本类型中,bool、所有整数类型(int/int8/.../uint64)、浮点型(float32/float64)、复数型(complex64/complex128)、string、uintptr、以及由这些类型构成的数组和结构体(
且所有字段都可比较),都支持直接比较。
常见误用:试图用 == 比较两个 slice、map 或 func 类型变量——这会编译报错:invalid operation: cannot compare ... (operator == not defined on ...)。
[]int{1,2} == []int{1,2} → 编译失败map[string]int{"a": 1} == map[string]int{"a": 1} → 编译失败func(){} == func(){} → 编译失败Go 的 string 是字节序列,== 做的是逐字节比较,不涉及 Unicode 归一化或大小写折叠。这意味着:
"café" == "cafe\u0301" 返回 false(即使视觉相同,UTF-8 编码不同)"ABC" == "abc" 返回 false(大小写敏感)golang.org/x/text/unicode/norm 归一化,或用 strings.EqualFold 做大小写不敏感比较import "strings"s1 := "HELLO" s2 := "hello" fmt.Println(s1 == s2) // false fmt.Println(strings.EqualFold(s1, s2)) // true
结构体能否用 == 取决于其所有字段是否可比较。哪怕只有一个不可比较字段(比如内嵌了 map 或 slice),整个结构体就不可比较。
type A struct{ X int; Y []string } → 不能用 ==
type B struct{ X int; Y string } → 可以用 ==
struct{} 是可比较的,且所有实例彼此相等(struct{}{} == struct{}{} 为 true)注意:结构体比较是浅层的,不会递归检查指针指向的内容;如果字段是指针,只比地址值,不是比指针所指对象。
== 安全吗不安全。由于精度丢失和舍入误差,直接用 == 比较 float32 或 float64 极易出错。
0.1 + 0.2 == 0.3 → false(IEEE 754 表示问题)math.Abs(a - b)
github.com/google/go-cmp/cmp(带选项支持浮点容差)import "math"func floatEqual(a, b, epsilon float64) bool { return math.Abs(a-b) < epsilon }
x, y := 0.1+0.2, 0.3 fmt.Println(floatEqual(x, y, 1e-9)) // true
结构体或切片里含浮点字段时,也得小心——它们整体仍可比较(只要字段类型允许),但结果可能不符合数学直觉。
# git
# go
# github
# golang
# 编码
# 字节
# google
# 标准库
# String
# 封装
# math
# 浮点型
# 字符串
# 结构体
# 递归
# bool
# int
# 指针
# 整数类型
# Struct
# operator
# float32
# 切片
# map
# 对象
# 浮点
# 的是
# 浮点数
# 就不
# 可以用
# 要注意
# 只有一个
# 也得
# 不符合
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
Python字符串处理进阶_切片方法解析【指导】
Windows系统文件被保护机制阻止怎么办_权限不足错误处理方案
Win11怎么设置屏保_Windows 11屏幕保护程序开启与设置【详解】
如何使用Golang处理静态文件缓存_提高页面加载速度
c++中如何对数组进行排序_c++数组排序算法汇总
c++怎么处理多线程死锁_c++ lock_guard与unique_lock锁管理【技巧】
C#如何使用Channel C#通道实现异步通信
Win11怎么设置默认输入法 Win11固定中文输入法【步骤】
php打包exe后无法写入文件_权限问题解决方法【教程】
Python函数接口稳定性_版本演进解析【指导】
Win11怎么设置多显示器任务栏 Win11扩展任务栏至多屏方便跨屏操作【技巧】
如何使用Golang指针与接口结合_实现方法调用和动态类型
如何使用正则表达式精确匹配最多含一个换行符的 start-end 区段
Win11怎么设置桌面图标间距_Windows11注册表IconSpacing修改
Go 中实现 Python urllib.quote() 等效功能的正确方式
PyTorch DDP 多进程训练在 Kaggle 笔记本中的正确启动方式
如何使用Golang编写单元测试_创建Test函数验证业务逻辑
php485返回空数组怎么回事_php485数据接收为空排查指南【详解】
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
Windows10如何更改鼠标灵敏度_Win10鼠标属性指针选项调节
Win11怎么卸载Photos应用_Win11卸载Photos应用方法【教程】
Win11怎么打开注册表_Windows 11注册表编辑器启动命令【步骤】
如何在Golang中写入XML文件_生成符合规范的XML数据
php嵌入式需要什么环境_搭建php+linux嵌入式开发环境【详解】
Windows蓝屏错误0x0000002C怎么解决_系统IO异常排查方法
mac怎么退出id_MAC退出iCloud账号与Apple ID切换【指南】
Mac如何调整Dock栏大小和位置_Mac程序坞个性化设置
c++输入输出流 c++ cin与cout格式化输出【方法】
C#如何使用XPathNavigator高效查询XML
Win11系统占用空间大怎么办 Win11深度瘦身清理指南【优化】
php订单日志怎么记录评价_php记录订单评价日志方法【方法】
Win11无法识别耳机怎么办_解决Win11插耳机没声音问题【步骤】
Win11怎么自动隐藏任务栏_Win11全屏显示设置【美化】
Windows10电脑怎么设置虚拟内存_Win10高级系统设置性能
Win11怎么设置任务栏对齐方式_Windows11个性化任务栏行为
Win11怎么连接蓝牙耳机_Win11蓝牙设备配对与连接教程【步骤】
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
Win11怎么设置指纹解锁 Win11笔记本录入指纹登录【教程】
c++ atoi和atof函数用法_c++字符数组转数字
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
Win11鼠标灵敏度怎么调 Win11鼠标指针移动速度设置【教程】
windows如何备份注册表_windows导出和导入注册表文件教程
如何在Golang中定义接口_抽象方法和多态实现
MAC的“接续互通”功能无法使用怎么办_MAC检查蓝牙、Wi-Fi和相同Apple ID登录
Windows如何拦截腾讯视频广告_Windows拦截腾讯视频广告方法【方法】
Win11怎么设置DNS服务器_Windows11修改网络适配器DNS优选
Win11如何更改任务栏颜色 Win11自定义任务栏背景色【美化】
Windows10如何更改鼠标图标_Win10鼠标属性指针浏览
Win10怎么关闭自动更新错误弹窗_Win10策略屏蔽失败提示减少干扰【防护】
Python安全爬虫设计_IP代理池与验证码识别策略解析
2026-01-01
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。