您好,登錄后才能下訂單哦!
這篇文章主要講解了“字符串 len == 0 和 字符串== "" 的區(qū)別有哪些”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“字符串 len == 0 和 字符串== "" 的區(qū)別有哪些”吧!
在測(cè)試的方法中,我們分別聲明了 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 }
在方法內(nèi)部?jī)H做了簡(jiǎn)單的變量類型聲明,分別以 字符串 == "" 和 字符串 len == 0 為判斷依據(jù)。
測(cè)試用例
編寫兩個(gè)方法的 Benchmark,用于后續(xù)的性能測(cè)試:
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() } }
結(jié)果分析
$ 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
從多次測(cè)試的結(jié)果來看,兩者比較:
性能幾乎沒有區(qū)別,甚至可以出現(xiàn)一模一樣的情況。
均不涉及內(nèi)存申請(qǐng)和操作,均為 0/op。說明變量并不是聲明了,就有初始化動(dòng)作的,這塊 Go 編譯器有做優(yōu)化。
結(jié)果上居然是一樣的。根據(jù)曹大的提示,我們可以進(jìn)一步看一下兩者的匯編代碼,看看具體區(qū)別在哪里:
$ 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·33cdeccccebe80329f1fdbee7f5874cb(sb) 0x0000 00000 (main.go:3) FUNCDATA $1, gclocals·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·33cdeccccebe80329f1fdbee7f5874cb SRODATA dupok size=8 0x0000 01 00 00 00 00 00 00 00
無論是 len(v) == 0,又或是 v == "" 的判斷,其編譯出來的匯編代碼都是完全一致的??梢悦鞔_ Go 編譯器在這塊做了明確的優(yōu)化,大概率是直接比對(duì)了。
因此在 Go 語言中 字符串 len == 0 和 字符串 == "" 的判定,這兩者可以認(rèn)為是沒有區(qū)別的。
感謝各位的閱讀,以上就是“字符串 len == 0 和 字符串== "" 的區(qū)別有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)字符串 len == 0 和 字符串== "" 的區(qū)別有哪些這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。