字符串 len == 0 和 字符串== "" 的区别有哪些

这篇文章主要讲解了“字符串 len == 0 和 字符串== "" 的区别有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“字符串 len == 0 和 字符串== "" 的区别有哪些”吧!

在测试的方法中,我们分别声明了 Test1 和 Test2 方法:

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 }

在方法内部仅做了简单的变量类型声明,分别以 字符串 == "" 和 字符串 len == 0 为判断依据。

测试用例

编写两个方法的 Benchmark,用于后续的性能测试:

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 goos: darwin goarch: amd64 BenchmarkTest1-4    1000000000          0.305 ns/op        0 B/op        0 allocs/op BenchmarkTest2-4    1000000000          0.305 ns/op        0 B/op        0 allocs/op PASS ok   _/Users/eddycjy/go-application/awesomeProject/tests 0.688s

从多次测试的结果来看,两者比较:

性能几乎没有区别,甚至可以出现一模一样的情况。

均不涉及内存申请和操作,均为 0/op。说明变量并不是声明了,就有初始化动作的,这块 Go 编译器有做优化。

结果上居然是一样的。根据曹大的提示,我们可以进一步看一下两者的汇编代码,看看具体区别在哪里:

$ go tool compile -S main.go "".main STEXT nosplit size=1 args=0x0 locals=0x0  0x0000 00000 (main.go:3) TEXT "".main(sb), NOSPLIT|ABIInternal, $0-0  0x0000 00000 (main.go:3) FUNCDATA $0, gclocals&middot;33cdeccccebe80329f1fdbee7f5874cb(sb)  0x0000 00000 (main.go:3) FUNCDATA $1, gclocals&middot;33cdeccccebe80329f1fdbee7f5874cb(sb)  0x0000 00000 (main.go:5) RET  0x0000 c3                                               . go.cuinfo.packagename. SDWARFINFO dupok size=0  0x0000 6d 61 69 6e                                      main ""..inittask SNOPTRDATA size=24  0x0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................  0x0010 00 00 00 00 00 00 00 00                          ........ gclocals&middot;33cdeccccebe80329f1fdbee7f5874cb SRODATA dupok size=8  0x0000 01 00 00 00 00 00 00 00

无论是 len(v) == 0,又或是 v == "" 的判断,其编译出来的汇编代码都是完全一致的。可以明确 Go  编译器在这块做了明确的优化,大概率是直接比对了。

因此在 Go 语言中 字符串 len == 0 和 字符串 == "" 的判定,这两者可以认为是没有区别的。

感谢各位的阅读,以上就是“字符串 len == 0 和 字符串== "" 的区别有哪些”的内容了,经过本文的学习后,相信大家对字符串 len == 0 和 字符串== "" 的区别有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!