我們為什麼需要進行程式碼檢查?
通常,程式碼檢查很重要,原因有三:
#避免低階bug:一些常見程式碼問題,如果在編譯或執行前不能及時發現,程式碼中的語法問題會直接導致編譯或執行時間錯誤,影響開發效率和程式碼品質;
統一程式碼習慣:每個團隊或個人都會有一些程式碼規格或程式碼習慣,為了方便後期維護和閱讀,我們寫的程式碼也需要符合一定的格式規格;
保證線上程式碼品質:在版本管理中,我們需要在提交或發布之前自動執行一些程式碼檢查工作,確保我們的程式碼符合最終版本要求。
golangci-lint
作為golang 支援最好的程式碼檢查工具,而且在golang開源程式庫中,有著大量的使用,由此可以說明為了專案更好的開發,和後期更好的維護,我們也可以嘗試引入它。
嘗試使用goalngci-lint 的問題
我們再日常的開發過程中,習慣的行為是:code -> git add -> git commit - > git push 一條龍服務。
1. 手動執行模式:
那麼這個時候需要在git commit
之前檢查我們的程式碼是否已經符合一定的規則,就需要手動執行golangci-lint run ./...
,或在git push
之前進行程式碼檢查。由於我們的 commit 和 push 都是日常操作,大機率比較頻繁,而這種手動的方式,多少有點繁瑣了。而在這種使用過程中,由於一些事情,可能也會忘記,更或者直接就不執行,覺得麻煩並對自己的程式碼充滿信心。所以整體使用下來,還是非常的emm, 你該懂的,不順手。
2. gitlab runner 模式:
#想到這個方案的原因可能是,我看到太多的開源程式庫都採用了伺服器程式碼檢查(雖然只是pr)
透過docker 建立了一個gitlab,並透過教學配置好了runner,這花了我2天時間,奈何我需要學習gitlab 的ci 配置,runner 的job 配置,以及一些工具的安裝,但是結果可能多少不太得勁。
想到伺服器檢查的結果在gitlab上,我們開發基本上(第一次拉取程式碼)不會到 gitlab 上去,那麼這個錯誤訊息怎麼投遞到對應的人手裡?或是多人寫一個功能,這種又怎麼去分配錯誤?這種採用伺服器檢查的方案被花費2天時間而pass掉。
3. 本地pre-commit
#既然伺服器檢查行不通,那麼我在提交程式碼之前就進行腳本檢查,有錯誤就不讓提交,這就會強制你處理你的錯誤。哈哈哈(機制啊)不會告訴你可以強制提交(慎用啊)。
這就開始了本地 pre-commit 腳本的編寫。透過網路上尋找資料並透過自己的需求編寫好了一個 pre-commit 腳本。主要是代碼fmt
和代碼golangci-lint
檢查。心想這次一定能成!
這時,腳本寫好了,但是改怎麼上傳到伺服器呢,由於.git 資料夾作為預設不可上傳到伺服器,只有寫一個init.sh 的腳本來上傳伺服器了,所有開發人員在第一次取得專案的時候只需要執行一下,本地的配置就好了,這就簡單很多了。
試著跑了一下:

。 。 。結果不得行。此處文字已經不能表達我的心情了。
經過一系列的操作後,發現golangci-lint
不支援單一檔案的檢查。
而我腳本檢查原理是這樣:
篩選目前 commit 中修改的所有 go檔案
每個檔案都執行一次
golangci-lint run xxx.go
golangci-lint 的執行過程需要很長的時間,不能說每次commit都等個1分鐘,這不就變相增加摸魚時間了[/doge] 。
#經過多番折騰,終於誕生了一個相對前面方案,非常適合我們的一種方式。 透過
init.sh 修改預設
git hook 位置到我們建立的
githooks 資料夾,具體的操作可以查看腳本內容,我覺得腳本寫的還蠻明確的。
pre-commit 提供 fmt 和 import 的檢查和自動格式化再自動添加,避免一些忘記自己格式化的操作。
pre-push來檢查項目是否在可以使用的狀態下推送到服務端。由於push不是那麼頻繁,所以這個時候採用的是整個專案的檢查。
以上是在本地使用 golangci-lint 的方案的詳細內容。更多資訊請關注PHP中文網其他相關文章!

C 更適合需要直接控制硬件資源和高性能優化的場景,而Golang更適合需要快速開發和高並發處理的場景。 1.C 的優勢在於其接近硬件的特性和高度的優化能力,適合遊戲開發等高性能需求。 2.Golang的優勢在於其簡潔的語法和天然的並發支持,適合高並發服務開發。

Golang在实际应用中表现出色,以简洁、高效和并发性著称。1)通过Goroutines和Channels实现并发编程,2)利用接口和多态编写灵活代码,3)使用net/http包简化网络编程,4)构建高效并发爬虫,5)通过工具和最佳实践进行调试和优化。

Go語言的核心特性包括垃圾回收、靜態鏈接和並發支持。 1.Go語言的並發模型通過goroutine和channel實現高效並發編程。 2.接口和多態性通過實現接口方法,使得不同類型可以統一處理。 3.基本用法展示了函數定義和調用的高效性。 4.高級用法中,切片提供了動態調整大小的強大功能。 5.常見錯誤如競態條件可以通過gotest-race檢測並解決。 6.性能優化通過sync.Pool重用對象,減少垃圾回收壓力。

Go語言在構建高效且可擴展的系統中表現出色,其優勢包括:1.高性能:編譯成機器碼,運行速度快;2.並發編程:通過goroutines和channels簡化多任務處理;3.簡潔性:語法簡潔,降低學習和維護成本;4.跨平台:支持跨平台編譯,方便部署。

關於SQL查詢結果排序的疑惑學習SQL的過程中,常常會遇到一些令人困惑的問題。最近,筆者在閱讀《MICK-SQL基礎�...

golang ...

Go語言中如何對比並處理三個結構體在Go語言編程中,有時需要對比兩個結構體的差異,並將這些差異應用到第�...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

禪工作室 13.0.1
強大的PHP整合開發環境