iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 15
0

https://ithelp.ithome.com.tw/upload/images/20200922/20115289ChmKGMYIVA.png

golangci-lint

是個針對Go語言多個Linters組合而成的Linter,是Linters的大集合。
導入linter在CI流程內,已成為常態,至少會警示你的code可能會遭遇哪些問題,安全性是否有疑慮等問題。

著名使用者們

以下著名的公司也有使用golangci-lint

  • AWS
  • Facebook
  • Google
  • Netflix
  • Arduino
  • Baidu
  • Eclipse Foundation
  • IBM
  • Istio
  • Percona
  • Red Hat OpenShift
  • Samsung
  • Serverless
  • ScyllaDB
  • SoundCloud
  • The New York Times
  • WooCart
  • Xiaomi
  • Yahoo

在github查詢也有上萬個收尋結果唷!

設定

golangci-lint會從當前目錄的以下路徑中查找配置文件:

  • .golangci.yml
  • .golangci.toml
  • .golangci.json

請自行在專案內建立上述其中一個檔案 ex:.golangci.yml檔案
這裡有個官網的.golangci.example.yml 範例給各位參考

使用

本機安裝

macOS

brew install golangci/tap/golangci-lint
brew upgrade golangci/tap/golangci-lint

Docker -> 個人推薦

docker run --rm -v $(pwd):/app -w /app golangci/golangci-lint:v1.30.0-alpine \
sh -c "golangci-lint run" -v

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.30.0
golangci-lint --version

CI/CD

example for drone:

kind: pipeline
type: docker
name: default

steps:
  - name: golangci-lint
    image: golangci/golangci-lint:v1.31.0-alpine
    commands:
      - golangci-lint run

Oops 誤報錯誤

當你的code確認沒問題,但Linter掃錯有bug想排除怎麼辦?
golangci-lint有提供 可以排除不使用lint的code方法

排除全部linters

var bad_name int //nolint

排除特定linters

var bad_name int //nolint:golint,unused

程式碼區塊排除

請在上方排除 ex: func上方 and 宣告變數上方

//nolint
func allIssuesInThisFunctionAreExcluded() *string {
  // ...
}
//nolint:govet
var (
  a int
  b int
)

整個檔案排除特定linter

//nolint:unparam
package pkg

個人推薦使用此方法

排除特定linter,並在後方說明原因,往後review時才會快速掌握排除主因

//nolint:gocyclo // This legacy function is complex but the team too busy to simplify it
func someLegacyFunction() *string {
  // ...
}

上一篇
[Day 14] Oops!Drone - Pipelines Services
下一篇
[Day 16] Oops!Golang - CI/CD with Data Race Detector
系列文
遠離 DevOops30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言