」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > ## Scopelint 錯誤:在範圍範圍內使用變數 - 如何安全地引用函數文字中的循環變數?

## Scopelint 錯誤:在範圍範圍內使用變數 - 如何安全地引用函數文字中的循環變數?

發佈於2024-11-08
瀏覽:901

## Scopelint Error: Using Variable on Range Scope - How to Safely Refer to Loop Variables in Function Literals?

Scopelint 錯誤:在範圍範圍上使用變數

Scopelint 錯誤:在範圍範圍上使用變數

for _, x := range tests {
    t.Run(x.description, func(t *testing.T) {
        client := fake.NewSimpleClientset(x.objs...)
        actual := getUID(client, x.namespace)
        assert.Equal(t, x.expected, actual)
    })
}
考慮以下程式碼行:

for _, x := 範圍測試 { t.Run(x.description, func(t *testing.T) { 客戶端 := fake.NewSimpleClientset(x.objs...) 實際 := getUID(客戶端, x.namespace) 斷言.Equal(t, x.預期, 實際) }) }錯誤與這些行有關,因為 x 是在測試切片上迭代的範圍循環內的循環變數。 Scopelint 偵測到 x 正在傳遞給 t.Run() 的函數文字中使用,如果在 t.Run() 返回後呼叫函數文字,則可能會導致潛在問題。

原因和最佳實踐

出現這個問題是因為編譯器無法保證創建並傳遞給t.Run() 的函數文字在之後不會被調用t.Run() 退出。如果在 t.Run() 返回後呼叫函數文字,它們將引用 x 變量,該變數可能已被循環後續迭代中的值覆蓋。 Go vet 會將此警告提出防止這種意外行為,如果函數文字在不同的 goroutine 中同時執行,可能會導致錯誤甚至資料競爭。 在這種情況下,建議的最佳實踐是透過

循環變數的值
x2 := x
並引用函數文字內的副本。由於函數字面量的簽章無法更改,建議的解決方案是建立副本,例如:

x2 := x## Scopelint Error: Using Variable on Range Scope - How to Safely Refer to Loop Variables in Function Literals?

聲明此副本後,函式文字將引用本機副本,而不是循環變數。雖然為副本分配相同的名稱可能看起來很混亂,但它清楚地表明了使用副本的意圖。

最新教學 更多>
  • 如何在 CSS 中縮排後續換行標籤行?
    如何在 CSS 中縮排後續換行標籤行?
    縮排換行標籤文字的後續行當面臨表單寬度的限制時,標籤文字可以換行到多行,從而美觀的擔憂。雖然第一行由於輸入元素的存在而縮進,但後續行可能不會縮進,從而產生不均勻的外觀。 要僅使用CSS 實現縮排的第二行和後續行,請考慮使用以下方法:要僅使用CSS 實現縮排的第二行和後續行,請考慮使用以下方法:將輸入...
    程式設計 發佈於2024-11-08
  • 如何在CSS中模糊背景影像而不模糊內容?
    如何在CSS中模糊背景影像而不模糊內容?
    CSS 在保持內容清晰度的同時對背景圖像進行模糊處理嘗試在CSS 設定中模糊背景圖像時,通常會遇到內容(文字或其他元素)也變得模糊的問題。這就是 z-index 和偽元素的概念發揮作用的地方。 要模糊背景圖像而不影響內容,可以採用以下方法:創建背景容器:將背景圖像包含在div或其他容器中並為其分配一...
    程式設計 發佈於2024-11-08
  • 啞的
    啞的
    大家好,我是Misti-sage,DOOF的唯一創造者: 動態的 輸出 針對進行了最佳化 靈活性。 (我是編碼新手,所以我的大部分(如果不是全部)DOOF 工作都是由 ChatGPT 協助的。) 我歡迎任何可以幫助改進 DOOF(也稱為 Darfensmirg)的人。 <!DOCTYPE ...
    程式設計 發佈於2024-11-08
  • 為什麼 Go 正規表示式 \\b 邊界對於拉丁字元會失敗?
    為什麼 Go 正規表示式 \\b 邊界對於拉丁字元會失敗?
    \b Go 正規表示式中拉丁文字元的邊界在Go 正規表示式的世界中, \b 邊界選項有一個輕微的怪癖處理拉丁字符時。當嘗試定義包含拉丁字元(例如重音元音和特殊字元)的單字時,就會出現此問題。 考慮以下範例,我們希望使用 \b 邊界選項來匹配單字「vis」:import ( "fmt...
    程式設計 發佈於2024-11-08
  • Node.js 中與 WebSockets 和 Socket.IO 的即時通信
    Node.js 中與 WebSockets 和 Socket.IO 的即時通信
    现代 Web 应用程序通常需要实时通信,无论是聊天系统、实时更新、协作编辑还是通知。传统的 HTTP 通信不足以满足实时应用程序的需要,因为它依赖于请求-响应模式。这就是 WebSockets 发挥作用的地方,它允许服务器和客户端之间进行全双工通信。 在本文中,我们将探讨: WebSocket 是什...
    程式設計 發佈於2024-11-08
  • H2 與 HSQLDB:哪種嵌入式資料庫最適合我的財務管理應用程式?
    H2 與 HSQLDB:哪種嵌入式資料庫最適合我的財務管理應用程式?
    Java 嵌入式資料庫比較鑑於有大量可用選項,為您的財務管理應用程式選擇嵌入式資料庫可能具有挑戰性。為了幫助您,讓我們根據您的需求比較 H2、HSQLDB、Derby 和 Berkeley DB。 H2 與 HSQLDBH2 和 HSQLDB 都提供出色的效能和穩定性。 H2以速度著稱,而HSQLD...
    程式設計 發佈於2024-11-08
  • C 中允許多少級指標間接定址?
    C 中允許多少級指標間接定址?
    C 語言中的指標深度:了解層級限制在 C 程式設計中,變數可以使用指標具有多層間接尋址。這種靈活性允許複雜的資料結構和高效的記憶體管理。然而,問題出現了:單一變數允許的最大指標等級(稱為“*”)是多少? 了解指針深度的限制對於有效和安全的編程至關重要。 C 標準定義了允許的指標等級數的下限,但上限是...
    程式設計 發佈於2024-11-08
  • CORS 可防止哪些錯誤:「Access-Control-Allow-Origin 不允許來源」?
    CORS 可防止哪些錯誤:「Access-Control-Allow-Origin 不允許來源」?
    CORS 防止的錯誤:「Access-Control-Allow-Origin 不允許來源」簡介:跨來源資源共享(CORS) 期間,當用戶端腳本嘗試從與其運行來源不同的來源存取資源。 原因:此錯誤有幾個潛在原因: 同源策略:未經伺服器明確許可, JavaScript 被限制存取其網域之外的資源。此策...
    程式設計 發佈於2024-11-08
  • 光澤和微光讓我的心率下降 - 案例研究
    光澤和微光讓我的心率下降 - 案例研究
    最近,一位客戶聯繫我,詢問其 WordPress 網站上的「財務評估」javascript 應用程式不再運作。它有很多問題,最後,最簡單的方法就是重建它。 在此應用程式中,使用者可以輸入基本的財務和個人訊息,應用程式會告訴他們在財務規劃方面是否走在正確的道路上。這不是超級複雜的邏輯,但有相當多的邏...
    程式設計 發佈於2024-11-08
  • 案例研究:加權九尾問題
    案例研究:加權九尾問題
    加權九尾問題可以簡化為加權最短路徑問題。 部分提出了九尾問題並使用 BFS 演算法解決了它。本節介紹問題的變體並使用最短路徑演算法解決它。 九尾問題是找出導致所有硬幣面朝下的最少移動次數。每一步都會翻轉一枚正面硬幣及其相鄰硬幣。加權九尾問題將翻轉次數指定為每次移動的權重。例如,您可以透過翻轉第一...
    程式設計 發佈於2024-11-08
  • 如何使用 document.querySelectorAll 正確循環選定的元素?
    如何使用 document.querySelectorAll 正確循環選定的元素?
    使用 document.querySelectorAll 循環選定的元素在 Web 開發中,循環選定的元素通常是必要的。 document.querySelectorAll 提供了一個表示所選元素的類似陣列的物件。但是,如果直接在 NodeList 上執行迭代,可能會出現問題,導致輸出中出現其他項目...
    程式設計 發佈於2024-11-08
  • 變數和資料夾的命名規則是什麼?
    變數和資料夾的命名規則是什麼?
    การตั้งชื่อสำหรับตัวแปรและโฟลเดอร์ในโปรเจกต์มีความสำคัญมากในการรักษาความอ่านง่ายและความเป็นระเบียบของโค้ด ต่อไปนี้คือลักษณะและกฎทั่วไปในการตั้งชื่อ: ...
    程式設計 發佈於2024-11-08
  • 使用 Python 建立測驗應用程式:逐步指南
    使用 Python 建立測驗應用程式:逐步指南
    您是否曾想创建自己的测验应用程序?这是一个有趣的项目,可以帮助您学习编程,同时也可以创造一些有用的东西。在此项目中,我们将逐步介绍如何构建一个包含多项选择题、评分、时间限制和不同主题的简单测验应用程序。 我们的测验应用程序会做什么 我们的测验应用程序将: 提出多项选择题 记录分数 ...
    程式設計 發佈於2024-11-08
  • 如何跨多個瀏覽器執行WebUI功能文件
    如何跨多個瀏覽器執行WebUI功能文件
    跨多個瀏覽器執行WebUI 功能文件平行測試和分散式測試技術提供了跨各種瀏覽器執行WebUI 功能文件的能力。在本文中,我們將探討如何在 Karate 和 Zalenium 中使用這些方法。 使用 Parallel RunnerKarate 中的平行運行器允許您執行並行的範例表。若要利用此功能針對多...
    程式設計 發佈於2024-11-08
  • PHP 中的 URL 縮短有哈希替代方法嗎?
    PHP 中的 URL 縮短有哈希替代方法嗎?
    URL 縮短的散列的替代方案URL 縮短的散列的替代方案正在尋求一種PHP 解決方案來創建簡潔的散列,就像URL 縮短服務(如TinyURL)所使用的?雖然可能會想到散列,但此回應揭示了一種不同的方法。 TinyURL 不依賴散列,而是利用 Base 36 整數(甚至包括大寫和小寫字母的 Base ...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3