实际应用中需要判断源字符串中是否包含子字符串,目前用的是strings.Contains,使用benchmark测试,300W字符串中找出一个符合条件的数据,strings.Contains的性能在0.0449 ns/op左右,strings.Index也差不多,在0.0429 ns/op左右;大家知道还有啥更高效的方法吗?
有疑问加站长微信联系(非本文作者)
![](https://static.golangjob.cn/static/img/footer.png?imageView2/2/w/280)
实际应用中需要判断源字符串中是否包含子字符串,目前用的是strings.Contains,使用benchmark测试,300W字符串中找出一个符合条件的数据,strings.Contains的性能在0.0449 ns/op左右,strings.Index也差不多,在0.0429 ns/op左右;大家知道还有啥更高效的方法吗?
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
`单行代码`
感觉不太容易,看了下string.Contains的源码,当substr比较小的时候,是暴力匹配的,做了汇编级别的优化;substr比较大的时候,就是字符串hash了
已经这么快了,还需要多快?
@Reverie 我也看了,确实比较难搞了,后面都是汇编,就是有点奇怪,benchmark测出来很快,但pprof打出来又耗时比较久,根据benchmark测出来的性能加上pprof上统计的时间算出来的调用次数远比真实业务要大很多
我觉得应该先说需求
我个人觉得如果你卡性能到这个程度,似乎不该使用带gc的语言了。
strings.Contains
0.0449 ns/op
难道还不够快吗?我的Benchmark里面什么逻辑都不写,也被甩了将近十倍的差距。啥配置这么强悍?可以明确的告诉你,你的benchmark很可能写错了,因为不可能那么快