Go len(字符串)==0或len(字符串)<;1.
在中,要检查字符串是否为空,可以使用以下方法:Go len(字符串)==0或len(字符串)<;1.,go,comparison-operators,Go,Comparison Operators,在中,要检查字符串是否为空,可以使用以下方法: len(str) == 0 或 基本上,这只是选择运算符的一米,因为空字符串是字符串的nil值,所以您应该将其与之进行比较 str == "" 根据变量的nil值检查变量是否为空是一种可行的方法 就表现而言,没有显著差异。使用len(str)是一种函数调用,因此理论上应该较慢 编辑:一些证据: 我对这段代码进行了基准测试: func BenchmarkNil(b *testing.B) { str := "asd" cnt :=
len(str) == 0
或
基本上,这只是选择运算符的一米,因为空字符串是字符串的nil值,所以您应该将其与之进行比较
str == ""
根据变量的nil值检查变量是否为空是一种可行的方法
就表现而言,没有显著差异。使用len(str)
是一种函数调用,因此理论上应该较慢
编辑:一些证据:
我对这段代码进行了基准测试:
func BenchmarkNil(b *testing.B) {
str := "asd"
cnt := 0
for i := 0; i < b.N; i++ {
if str == "" {
cnt++
}
}
}
对于检查空字符串(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
EDIT2:
现在,你唯一能做的事情就是对它进行基准测试,以确定它的速度有多快。现代CPU是超标量的,所以每条指令一个时钟周期不再是真的了。在我的4GHz 6700k上,与空字符串比较的基准代码运行速度为2.94GHz(2.94*10^9 op/s),每个循环迭代少于两个时钟周期。针对非空字符串的nil检查在同一CPU上以2GHz(2*10^9 op/s)运行
这意味着在nil检查中,每个循环迭代有2个cpu周期,在len检查中有3个cpu周期,或者在针对空字符串的检查中,每个循环迭代有一条指令 如果您进行检查,您会看到有关于相等的跳转指令和关于不等的跳转指令。所以在理论上,如果你对Go编译器做一些简单的假设,=代码>和我想你的意思是str==”
而不是len(str)!=“”
(最后一个是语法错误)谢谢,我刚刚修复:)
func BenchmarkNil(b *testing.B) {
str := "asd"
cnt := 0
for i := 0; i < b.N; i++ {
if str == "" {
cnt++
}
}
}
BenchmarkLenEq-8 2000000000 0.77 ns/op
BenchmarkLenLess-8 2000000000 0.76 ns/op
BenchmarkNil-8 2000000000 0.50 ns/op
BenchmarkLenEq-8 2000000000 0.34 ns/op
BenchmarkLenLess-8 2000000000 0.33 ns/op
BenchmarkNil-8 2000000000 0.33 ns/op