[轉]在GoLand中使用golangci-lint

      網友投稿 1974 2025-04-01

      即使本文(原文:https://medium.com/nerd-for-tech/golangci-lint-and-the-goland-ide-42aabc14f7d5)是以 GoLand IDE 作為最終目標編寫的,我猜這里的想法也適用于任何現代 IDE。

      運行靜態代碼分析(又名掉毛golang程序)是對糟糕的編碼和廉價的方式開始新的golang代碼審查的做法防御的第一線。它也是持續集成管道中的第一個質量門。這篇文章是關于前者。

      有一個完整的 golang linters 列表,單獨運行每一個都不是很有趣。于是golangci-lint(https://golangci-lint.run/)誕生了。與單獨運行每個 linter(可能在 shell 腳本的幫助下)相比,該軟件將以非常有效的方式運行您喜歡的 linter。此外,習慣上只在 CI 管道中運行 linter,而不是在您的開發環境中運行。很多時候,人們最終會配置抑制“有問題”的 lint 錯誤,甚至更糟:一起禁用照明。

      當 linting 成為敵人時

      從命令行運行 golangci-lint(或任何與此相關的 linter)可能會導致問題列表,然后您需要在一個窗口中擁有該列表并在編輯器中手動修復問題。

      雪上加霜的是,如果您使用的是操作系統的 Unix 衍生版本,那么有關如何在 JetBrains GoLand IDE 下運行 linter 的文檔可能就足夠了。事實上,一切都與 golangci-lint 文檔中建議的設置相得益彰。但是,當僅限于企業環境開發設置時,安全性歇斯底里使您的 CPU 在實時掃描所有文件系統操作上花費太多周期……好吧……事情變慢了,您的 IDE 感覺就像是PTFE 覆蓋的垂直桿。

      此外,在編碼時讓 linter 噴出 lint 錯誤會使注意力從實際編碼上移開。我想這可能是人們更喜歡編輯器(vim、Emacs、Sublime Text 等)和更簡單的 IDE(如 VS Code)而不是可用的成熟 IDE 產品的原因之一。

      這種干擾類似于違背您的意愿或無法控制的強制上下文切換(https://www.linkedin.com/pulse/context-switching-developers-paul-graham)。

      很有可能你會說sod this并一起禁用linting。

      按需運行 linter

      任何 IDE 最酷的地方在于它的構建配置(又名。運行/調試配置)。大多數情況下,這些僅用于此目的:設置運行和調試配置。但是,瞧,通常,您可以設置運行/調試配置來運行 shell 腳本(Powershell 腳本確實屬于這一類)。

      注意:在下面的示例設置中,我將使用Gorm包。本文不反映包的質量,這里僅作為示例使用。我喜歡這個包并使用過它,并且不止一次推薦過它。

      我喜歡使用 GoLand IDE,它具有足夠的智能來檢測我的程序生成的輸出類型。除此之外,它將檢測給定文件的路徑以及相應的行號和列號。當點擊鏈接時,編輯器的光標將被放置在文件的相應位置。

      在 GoLand IDE 中運行 golangci-lint 時使用 tab 格式的示例輸出。

      您可能更喜歡 golangci-lint 產生的其他輸出之一。我喜歡這種輸出格式(名為tab),因為它的清晰度和減少信息過載。我發現此輸出中缺少的是 lint 問題的嚴重性(默認情況下,golangci-lint 將所有內容都視為嚴重性錯誤)。

      另一方面,默認輸出對我來說太冗長了。

      F:\gorm/callbacks\callbacks.go:28:24: Error return value of `queryCallback.Register` is not checked (errcheck) queryCallback.Register(“gorm:preload”, Preload) ^ F:\gorm/callbacks\callbacks.go:29:24: Error return value of `queryCallback.Register` is not checked (errcheck) queryCallback.Register(“gorm:after_query”, AfterQuery) ^ F:\gorm/callbacks\callbacks.go:32:50: Error return value of `(*gorm.io/gorm.callback).Register` is not checked (errcheck) deleteCallback.Match(enableTransaction).Register(“gorm:begin_transaction”, BeginTransaction)

      您需要的第一件事是包裝外殼腳本。撰寫本文時考慮到了 Windows 的煩惱。因此,Powershell 就是這樣。我們稱這個文件為 linting.ps1:

      $location = "$(Get-Location)" golangci-lint.exe run --out-format tab --path-prefix $location $args[0]

      $args[0] 允許您將目錄名稱傳遞給腳本,從而可以一次僅對子包進行 lint。

      您需要的第二件事是調用 Powershell 腳本的運行/調試配置(或者您可以調用 shell 腳本并將 Powershell 作為要使用的解釋器)。當然,Jetbrains IDE 具有可用的 Powershell 配置。

      Powershell 運行/調試配置示例。

      您現在已準備好按需運行 linting。

      使用運行/調試配置中的腳本參數字段通過傳遞相應的目錄名稱來分析子包。

      關于下一步去哪里的建議

      我發現您可能會考慮使用一些更好的做法:

      定義要使用的短絨。有幾種可用的 linter,啟用所有內容和廚房水槽可能會適得其反,所以從默認值開始。要使用的 linter 可以作為命令行選項傳遞給 golangci-lint 程序。查看https://golangci-lint.run/usage/linters/以了解可用 linters 的概述。

      太多的命令行選項會讓生活變得一團糟。請改用配置文件。一個好的起點是https://golangci-lint.run/usage/configuration/#config-file。

      通過修改配置文件來調整 linter 的行為。您的團隊可能會發現,如果函數超過 60 行或 40 條語句,并且行長超過 120 個字符,那么它仍然具有可讀性。

      對整個存儲庫進行 lint 處理可能很誘人,但由于可能返回的 lint 錯誤數量眾多,很快就會變得不堪重負。一次清理一個包是一種更好的方法。

      關于配置文件選項的一些注意事項

      我不會詳細說明要使用哪些 linter 以及諸如此類的東西,因為本文的范圍是IDE 內部的 linting。我將接觸的唯一配置與此主題相關。

      output: path-prefix: "" sort-results: true format: tab print-issued-lines: false print-linter-name: true uniq-by-line: false

      前三個選項對于我們的按需上市最重要。

      path-prefix: “”這個值無關緊要,因為它被(Power)shell 文件中的相應命令行選項覆蓋。但為了清楚起見,空白和任何東西一樣好。

      sort-results: true您希望這樣可以將每個文件組合在一起,而不是到處都是。

      格式:tab如上所述,我發現tab格式比其他格式更容易閱讀。

      請自行決定使用以下選項:

      print-issued-lines: false如果設置為true并使用任何其他格式化程序,則會產生非常冗長的輸出。

      print-linter-name: true了解哪些 linter 對什么做出反應是很有用的。

      uniq-by-line: false 進一步減少可能的信息過載。

      /**********************************golangci-lint 安裝***********************************************/

      https://asciinema.org/a/183662

      [轉]在GoLand中使用golangci-lint

      安裝:

      Linux and Windows

      # binary will be $(go env GOPATH)/bin/golangci-lint curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.41.1 golangci-lint --version

      On Windows, you can run the above commands with Git Bash, which comes with?Git for Windows.

      Install from Source

      Note: such?go get?installation aren't guaranteed to work. We recommend using binary installation.

      go get github.com/golangci/golangci-lint/cmd/golangci-lint@v1.41.1

      簡單運行:

      golangci-lint run

      /*************************************題外話***********************************************/

      https://asciinema.org/ Linux/mac控制臺操作輕量的錄制工具

      安裝:

      Ubuntu sudo apt-add-repository ppa:zanchey/asciinema sudo apt-get update sudo apt-get install asciinema

      cast文件嵌入參考:

      https://github.com/asciinema/asciinema-player

      PowerShell

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:2019版本的WPS畫報怎么找不到了(wps畫報在哪里打開)
      下一篇:快速理解spark-on-k8s中的external-shuffle-service
      相關文章
      亚洲AV一二三区成人影片| 亚洲人成电影网站久久| 亚洲成av人在线观看网站| 亚洲无mate20pro麻豆| 4444亚洲国产成人精品| 日韩亚洲人成在线综合日本| 亚洲综合色婷婷七月丁香| 亚洲色偷偷综合亚洲AV伊人| 亚洲精品国产精品国自产观看| yy6080久久亚洲精品| 天堂亚洲免费视频| 亚洲高清无码综合性爱视频| 亚洲Av无码国产情品久久| 亚洲毛片不卡av在线播放一区| 亚洲综合色成在线播放| 久久久久亚洲AV无码专区网站| 亚洲精品国产精品乱码不卞| 久久久无码精品亚洲日韩软件| 国产亚洲精品激情都市| 亚洲日韩一页精品发布| 日韩亚洲变态另类中文| 亚洲一区二区三区香蕉| 爱爱帝国亚洲一区二区三区| 亚洲AV成人影视在线观看| 亚洲国产成人精品电影| 亚洲黄网站wwwwww| 亚洲AV美女一区二区三区| 亚洲AV成人精品网站在线播放 | 亚洲日韩中文字幕一区| 亚洲 日韩 色 图网站| 亚洲综合精品第一页| 亚洲一区二区三区免费视频| 亚洲妓女综合网99| 亚洲另类激情综合偷自拍| 成人午夜亚洲精品无码网站 | 亚洲国产精品第一区二区| 亚洲精品国产成人99久久| 内射干少妇亚洲69XXX| 亚洲黄色片免费看| 亚洲精品天天影视综合网| 久久亚洲AV午夜福利精品一区|