Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go len(字符串)==0或len(字符串)<;1._Go_Comparison Operators - Fatal编程技术网

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