切换导航
{{systemName}}
{{ info.Title }}
{{info.Title}}
{{ menu.Title }}
{{menu.Title}}
登录
|
退出
搜索
Golang判断slice是否相等
作者:ych
go 中是不能够直接通过 == 来判断两个切片是否相等的。一般来说,我们通过两种方法可以去比较切片是否相等: ##### reflect.DeepEqual go 的官方包提供了相应的处理函数 reflect.DeepEqual(x, y interface{}) bool。当不知道切片类型时,推荐使用此方法,因为其要去做反射判断,相对而言会比较耗时。 ``` func ReflectEqual(x, y interface{}) bool { return reflect.DeepEqual(x, y) } ``` ##### 循环切片进行比较 可以自己写个比较方法,这里我以 []byte 的比较作为例子: ``` // 需要明确知道切片的类型,例如: func ForEqual(x, y []byte) bool { if len(x) != len(y) { return false } if (x == nil) != (y == nil) { return false } for i, v := range x { if v != y[i] { return false } } return true } ``` ##### 两种方法的Benchmark对比 ``` func BenchmarkForEqual(b *testing.B) { x := []byte("awsl") y := []byte("awxsl") b.ResetTimer() for n := 0; n < b.N; n++ { ForEqual(x, y) } } func BenchmarkReflectEqual(b *testing.B) { x := []byte("awsl") y := []byte("awxsl") b.ResetTimer() for n := 0; n < b.N; n++ { ReflectEqual(x, y) } } ``` 由此可见,反射付出了很惊人的性能代价。 ##### 总结 当明确知道需要比较的切片类型时,建议自己写比较方法。由于 reflect 包的比较方法会耗费更多的时间,当然了,你如果不需要关心代码的运行效率,也可以使用 reflect 的方法,毕竟一行就搞定了。
相关推荐
golang 中解析 tag 是怎么实现的?反射原理是什么?(中高级肯定会问,比较难,需要自己多去总结)
golang map 使用注意的点,是否并发安全?
uint 类型溢出问题
Golang中defer和return执行的先后顺序
讲讲 Go 的 select 底层数据结构和一些特性?(难点,没有项目经常可能说不清,面试一般会问你项目中怎么使用select)
golang中两个变量值的4种交换方式
调用函数传入结构体时,应该传值还是指针? (Golang 都是传值)
为 sync.WaitGroup 中Wait函数支持 WaitTimeout 功能.
单例模式的应用场景
讲讲 Go 的 defer 底层数据结构和一些特性?
Golang空结构体 struct{} 的使用
go defer,多个 defer 的顺序,defer 在什么时机会修改返回值?
序列化协议
Golang 单引号,双引号,反引号的区别?
Golang表示枚举类型的详细讲解
昨天那个在for循环里append元素的同事,今天还在么?
什么是死锁?死锁产生的原因?如何避免死锁?
golang并发题目测试
交替打印数字和字母
golang面试题
B+树为什么快
for range 的时候它的地址会发生变化么?
数组和切片的区别 (基本必问)
实现阻塞读且并发安全的map
机器人坐标问题
复利计算 递归/非递归
在 golang 协程和channel配合使用
MySQL索引原理
写出以下逻辑,要求每秒钟调用一次proc并保证程序不退出?
讲讲 Go 的 slice 底层数据结构和一些特性?
高并发下的锁与map的读写
Redis的优点
判断两个给定的字符串排序后是否一致
常见语法题目2
字符串替换问题
ElasticSearch使用场景
常见语法题目1
golang 中 make 和 new 的区别?(基本必问)
七道语法找错题目
判断字符串中字符是否全都不同
redis缓存穿透、缓存击穿、缓存雪崩原因+解决方案
基本数据结构和算法
消息队列使用的场景介绍
操作系统基本原理
翻转字符串
redis在项目中的使用
TiDB使用场景
评论区
先去登录
版权所有:机遇屋在线 Copyright © 2021-2025 jiyuwu Co., Ltd.
鲁ICP备16042261号-1