日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
問(wèn)個(gè)Go問(wèn)題,字符串len==0和字符串=="",有啥區(qū)別?

本文轉(zhuǎn)載自微信公眾號(hào)「 腦子進(jìn)煎魚了」,作者陳煎魚 。轉(zhuǎn)載本文請(qǐng)聯(lián)系 腦子進(jìn)煎魚了公眾號(hào)。

成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括泗陽(yáng)網(wǎng)站建設(shè)、泗陽(yáng)網(wǎng)站制作、泗陽(yáng)網(wǎng)頁(yè)制作以及泗陽(yáng)網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,泗陽(yáng)網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到泗陽(yáng)省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

大家好,我是煎魚。

前幾天在微信群看到幾位大佬在討論一個(gè) Go 語(yǔ)言相關(guān)的問(wèn)題:字符串 len == 0 和 字符串 == "",有啥區(qū)別?“

這是一個(gè)比較小的細(xì)節(jié)點(diǎn),同時(shí)也勾起了我的好奇心,因此今天這篇文章就和大家一起研究一下他們兩者有沒(méi)有區(qū)別,誰(shuí)的性能更好一些?

建議在此處先自行思考一下,在心里給出自己的答案。

測(cè)試方法

在測(cè)試的方法中,我們分別聲明了 Test1 和 Test2 方法:

 
 
 
  1. func Test1() bool { 
  2.  var v string 
  3.  if v == "" { 
  4.   return true 
  5.  } 
  6.  return false 
  7.  
  8. func Test2() bool { 
  9.  var v string 
  10.  if len(v) == 0 { 
  11.   return true 
  12.  } 
  13.  return false 

在方法內(nèi)部?jī)H做了簡(jiǎn)單的變量類型聲明,分別以 字符串 == "" 和 字符串 len == 0 為判斷依據(jù)。

測(cè)試用例

編寫兩個(gè)方法的 Benchmark,用于后續(xù)的性能測(cè)試:

 
 
 
  1. func BenchmarkTest1(b *testing.B) { 
  2.  for i := 0; i < b.N; i++ { 
  3.   Test1() 
  4.  } 
  5.  
  6. func BenchmarkTest2(b *testing.B) { 
  7.  for i := 0; i < b.N; i++ { 
  8.   Test2() 
  9.  } 

結(jié)果分析

 
 
 
  1. $ go test --bench=. -benchmem 
  2. goos: darwin 
  3. goarch: amd64 
  4. BenchmarkTest1-4    1000000000          0.305 ns/op        0 B/op        0 allocs/op 
  5. BenchmarkTest2-4    1000000000          0.305 ns/op        0 B/op        0 allocs/op 
  6. PASS 
  7. ok   _/Users/eddycjy/go-application/awesomeProject/tests 0.688s 

從多次測(cè)試的結(jié)果來(lái)看,兩者比較:

性能幾乎沒(méi)有區(qū)別,甚至可以出現(xiàn)一模一樣的情況。

均不涉及內(nèi)存申請(qǐng)和操作,均為 0/op。說(shuō)明變量并不是聲明了,就有初始化動(dòng)作的,這塊 Go 編譯器有做優(yōu)化。

結(jié)果上居然是一樣的。根據(jù)曹大的提示,我們可以進(jìn)一步看一下兩者的匯編代碼,看看具體區(qū)別在哪里:

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

無(wú)論是 len(v) == 0,又或是 v == "" 的判斷,其編譯出來(lái)的匯編代碼都是完全一致的??梢悦鞔_ Go 編譯器在這塊做了明確的優(yōu)化,大概率是直接比對(duì)了。

因此在 Go 語(yǔ)言中 字符串 len == 0 和 字符串 == "" 的判定,這兩者可以認(rèn)為是沒(méi)有區(qū)別的。


分享名稱:?jiǎn)杺€(gè)Go問(wèn)題,字符串len==0和字符串=="",有啥區(qū)別?
URL地址:http://m.5511xx.com/article/cddhhdi.html