gpt4 book ai didi

go - len(字符串) == 0 或 len(字符串) < 1

转载 作者:IT王子 更新时间:2023-10-29 01:24:32 27 4
gpt4 key购买 nike

Go , 要检查字符串是否为空,可以使用:

len(str) == 0

len(str) < 1

str == ""

基本上就是选择运营商的一米== , < , != ,但就性能而言希望选项更好?

我的猜测是 ==只是比较而不是遍历 < 这样的值或者 <==可以做,因此想知道对此的最佳方法实践是什么。

最佳答案

由于空字符串是字符串的 nil 值,您应该与它进行比较。

str == ""

根据它们的 nil 值检查变量以查看它们是否为空是执行此操作的 Go 方法。

就性能而言,没有显着差异。使用 len(str)是一个函数调用,所以理论上它应该更慢。

编辑:一些证据:

我对这段代码进行了基准测试:

func BenchmarkNil(b *testing.B) {
str := "asd"
cnt := 0
for i := 0; i < b.N; i++ {
if str == "" {
cnt++
}
}
}

在 if 语句中进行三种不同的检查:str == "" , len(str) == 0len(str) < 1 .

BenchmarkLenEq-8        2000000000               0.77 ns/op
BenchmarkLenLess-8 2000000000 0.76 ns/op
BenchmarkNil-8 2000000000 0.50 ns/op

检查空字符串( str := "" 而不是 str := "asd" ),没有可测量的差异。检查非空字符串需要更多时间,而 nil 检查明显更快。

BenchmarkLenEq-8        2000000000               0.34 ns/op
BenchmarkLenLess-8 2000000000 0.33 ns/op
BenchmarkNil-8 2000000000 0.33 ns/op

编辑 2:这些天你唯一能做的就是对它进行基准测试来确定它有多快。现代 CPU 是超标量的,因此每条指令一个时钟周期不再适用。与空字符串进行比较的基准代码在我的 4GHz 6700k 上以 2.94GHz (2.94*10^9 op/s) 运行,每次循环迭代少于两个时钟周期。针对非空字符串的 nil 检查在同一 CPU 上以 2GHz (2*10^9 op/s) 运行。

这意味着在 nil 检查时每个循环迭代 2 个 cpu 周期,在 len 检查时 3 个,或者在检查空字符串时每个循环迭代一个指令。

关于go - len(字符串) == 0 或 len(字符串) < 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34837805/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com