亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

go vet:捕獲內部競爭條件,但不捕獲外部競爭條件

go vet:捕獲內部競爭條件,但不捕獲外部競爭條件

Go
慕俠2389804 2023-07-31 15:50:00
在最近使用了導致數據爭用的嵌套循環。go vet只發現了一些問題。使用簡化版本:for _, o := range ol {? ? ? ? o := o // <- remove this: `go vet` does *NOT* complain? ? ? ? for _, d := range dl {? ? ? ? ? ? d := d // <- remove this: `go vet` will complain? ? ? ? ? ? go func() {? ? ? ? ? ? ? ? fmt.Printf("%03d %03d\n", o, d) // potential data-race? ? ? ? ? ? }()? ? ? ? }? ? }操場go vet正確檢測內部競爭條件,但不能正確檢測外部競爭條件。為什么是這樣?太復雜而無法跟蹤超過 2 層的范圍?
查看完整描述

2 回答

?
慕姐4208626

TA貢獻1852條經驗 獲得超7個贊

代碼中的注釋說:

該分析器檢查循環體內函數文字中對循環變量的引用。它僅檢查在 defer 或 go 語句(循環體中的最后一個語句)中調用函數文字的實例,否則我們將需要整個程序分析。

go vet命令不會抱怨,o因為 go 語句不是o循環中的最后一條語句。

該測試非常簡單,可能會檢測到大多數錯誤實例。檢測錯誤的其他實例需要一種需要更多時間來開發和執行的方法。


查看完整回答
反對 回復 2023-07-31
?
慕田峪7331174

TA貢獻1828條經驗 獲得超13個贊

具體來說這個評論:

...這個問題分析起來更具挑戰性,因為它需要證明該函數不是在循環內調用的,或者至少無法證明它是在循環內調用的。一旦匿名函數被存儲在數據結構中或傳遞給另一個函數,vet 就無法再精確地確定何時可能調用它。

換句話說,我認為當前的獸醫檢查可能與我們在沒有過程間分析的情況下所能做的一樣好。


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

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

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

公眾號

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