Go:字符串 len 和 == 判断空值对比

判断空字符串

判断字符串是否为空的常用方法如下:

str := ""
fmt.Println(str == "")
fmt.Println(len(str ) == 0)

那么通过直接判断空字符串和判断字符串长度两种方法,有什么性能区别呢

benchmark性能测试

func Test1() bool {
    var v string
    if v == "" {
        return true
    }
    return false
}

func Test2() bool {
    var v string
    if len(v) == 0 {
        return true
    }
    return false
}
func BenchmarkTest1(b *testing.B) {
    for i := 0; i < b.N; i++ {
        Test1()
    }
}

func BenchmarkTest2(b *testing.B) {
    for i := 0; i < b.N; i++ {
        Test2()
    }
}

执行编译指令:

go test --bench=. -benchmem
image.png

通过测试可以看出,几乎没有任何差距

compile编译汇编

go tool compile -S main.go
image.png

通过比对汇编代码,我们可以看出二者完全一致

结论

无论是对比性能,还是汇编代码,二者都是一致的。所以是go在编译过程中,做了特殊优化,使得二者执行完全一致。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容