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
# 对象
# 浮点
# 的是
# 浮点数
# 就不
# 可以用
# 要注意
# 只有一个
# 也得
# 不符合
相关文章:
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何快速搭建个人网站并优化SEO?
建站之星如何一键生成手机站?
威客平台建站流程解析:高效搭建教程与设计优化方案
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
定制建站策划方案_专业建站与网站建设方案一站式指南
如何在橙子建站上传落地页?操作指南详解
c# 在高并发场景下,委托和接口调用的性能对比
网站制作话术技巧,网站推广做的好怎么话术?
如何选择CMS系统实现快速建站与SEO优化?
制作营销网站公司,淘特是干什么用的?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
如何用虚拟主机快速搭建网站?详细步骤解析
如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
网站制作免费,什么网站能看正片电影?
C#如何使用XPathNavigator高效查询XML
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
如何做静态网页,sublimetext3.0制作静态网页?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
建站主机与虚拟主机有何区别?如何选择最优方案?
网站app免费制作软件,能免费看各大网站视频的手机app?
企业网站制作公司网页,推荐几家专业的天津网站制作公司?
宝塔新建站点为何无法访问?如何排查?
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
孙琪峥织梦建站教程如何优化数据库安全?
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
建站主机CVM配置优化、SEO策略与性能提升指南
如何快速辨别茅台真假?关键步骤解析
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
黑客如何通过漏洞一步步攻陷网站服务器?
外贸公司网站制作哪家好,maersk船公司官网?
如何基于云服务器快速搭建个人网站?
小型网站建站如何选择虚拟主机?
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
如何高效生成建站之星成品网站源码?
如何在Windows 2008云服务器安全搭建网站?
家庭建站与云服务器建站,如何选择更优?
招贴海报怎么做,什么是海报招贴?
如何获取免费开源的自助建站系统源码?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
建站主机系统SEO优化与智能配置核心关键词操作指南
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】
如何在IIS中新建站点并配置端口与物理路径?
制作网站公司那家好,网络公司是做什么的?
宝塔Windows建站如何避免显示默认IIS页面?
*请认真填写需求信息,我们会在24小时内与您取得联系。