第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

len(string) == 0 或 len(string) < 1

len(string) == 0 或 len(string) < 1

Go
慕妹3146593 2021-12-07 10:48:14
在Go 中,要檢查字符串是否為空,可以使用:len(str) == 0或者len(str) < 1或者str == ""基本上只是一個選擇的運營商的計==,<,!=,但在性能上的愿望選擇方面比較好?我的猜測是,==只是比較而不是遍歷值,<或者兩者<==都可以做,因此想知道什么是最好的方法實踐。
查看完整描述

2 回答

?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

由于空字符串是字符串的 nil 值,因此您應該與之進行比較。


str == ""

根據它們的 nil 值檢查變量以查看它們是否為空是執(zhí)行此操作的 Go 方式。


在性能方面,沒有顯著差異。Usinglen(str)是一個函數調用,所以理論上它應該更慢。


編輯:一些證據:


我對這段代碼進行了基準測試:


func BenchmarkNil(b *testing.B) {

    str := "asd"

    cnt := 0

    for i := 0; i < b.N; i++ {

        if str == "" {

            cnt++

        }

    }

}

使用 if 語句中的三個不同檢查:str == "",len(str) == 0和len(str) < 1。


BenchmarkLenEq-8        2000000000               0.77 ns/op

BenchmarkLenLess-8      2000000000               0.76 ns/op

BenchmarkNil-8          2000000000               0.50 ns/op

對于檢查空字符串(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: 這些天你唯一能確定某事有多快的事情就是對其進行基準測試?,F(xiàn)代 CPU 是超標量的,因此每條指令一個時鐘周期根本不再正確。與空字符串比較的基準代碼在我的 4GHz 6700k 上以 2.94GHz(2.94*10^9 op/s)運行,每次循環(huán)迭代不到兩個時鐘周期。針對非空字符串的 nil 檢查在同一 CPU 上以 2GHz (2*10^9 op/s) 運行。


這意味著 nil 檢查時每次循環(huán)迭代需要 2 個 CPU 周期,len 檢查時需要 3 個 CPU 周期,或者對空字符串進行檢查時每次循環(huán)迭代一次指令。


查看完整回答
反對 回復 2021-12-07
?
千萬里不及你

TA貢獻1784條經驗 獲得超9個贊

如果您檢查X86 Assembly control flow,您會看到有跳轉等式和跳轉不等式指令。所以理論上,如果你對 Go 編譯器做一些簡單的假設,!=并且<會執(zhí)行相同的(1 個 CPU 時鐘)。

如果你真的很喜歡它,你可以看到這個答案并比較為每個人生產的組件。


查看完整回答
反對 回復 2021-12-07
  • 2 回答
  • 0 關注
  • 266 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號