# golangci-lint 配置文件 # https://golangci-lint.run/usage/configuration/ # 运行时配置 run: # 默认并行处理器数量 default-concurrency: 4 # 超时时间 timeout: 5m # 退出代码 issues-exit-code: 1 # 测试包含的文件 tests: true # 是否跳过文件 skip-files: - "_test\\.go$" - ".*\\.gen\\.go$" - ".*\\.pb\\.go$" # 是否跳过目录 skip-dirs: - "vendor" - "node_modules" - ".git" - "build" - "dist" # 输出配置 output: # 输出格式 format: colored-line-number # 打印已使用的 linter print-issued-lines: true # 打印 linter 名称 print-linter-name: true # 唯一性检查 uniq-by-line: true # linter 启用配置 linters-settings: # 错误检查 errcheck: # 检查类型断言 check-type-assertions: true # 检查赋值 check-blank: true # 代码复杂度 gocyclo: # 最小复杂度 min-complexity: 15 # 函数参数和返回值 gocognit: # 最小认知复杂度 min-complexity: 20 # 函数长度 funlen: # 最大行数 lines: 60 # 最大语句数 statements: 40 # 代码行长度 lll: # 最大行长度 line-length: 120 # 导入顺序 importas: # 别名规则 no-unaliased: true alias: - pkg: "github.com/sirupsen/logrus" alias: "logrus" - pkg: "github.com/stretchr/testify/assert" alias: "assert" - pkg: "github.com/stretchr/testify/suite" alias: "suite" # 重复导入 dupl: # 重复代码块的最小 token 数 threshold: 100 # 空值检查 nilerr: # 检查返回 nil 的函数 check-type-assertions: true check-blank: true # 代码格式化 gofmt: # 格式化简化 simplify: true # 导入检查 goimports: # 本地前缀 local-prefixes: "{{.ModuleName}}" # 静态检查 staticcheck: # 检查版本 go_version: "1.22" # 结构体标签 structtag: # 检查标签 required: [] # 是否允许空标签 allow-omit-latest: true # 未使用的变量 unused: # 检查字段 check-exported-fields: true # 变量命名 varnamelen: # 最小变量名长度 min-name-length: 2 # 检查参数 check-parameters: true # 检查返回值 check-return: true # 检查接收器 check-receiver: true # 检查变量 check-variable: true # 忽略名称 ignore-names: - "ok" - "err" - "T" - "i" - "n" - "v" # 忽略类型 ignore-type-assert-ok: true ignore-map-index-ok: true ignore-chan-recv-ok: true ignore-decls: - "T any" - "w http.ResponseWriter" - "r *http.Request" # 启用的 linter linters: enable: # 错误检查 - errcheck - errorlint - goerr113 # 代码复杂度 - gocyclo - gocognit - funlen # 代码风格 - gofmt - goimports - lll - misspell - whitespace # 导入检查 - importas - dupl # 静态检查 - staticcheck - unused - typecheck - ineffassign - bodyclose - contextcheck - nilerr # 测试检查 - tparallel - testpackage - thelper # 性能检查 - prealloc - unconvert # 安全检查 - gosec - noctx - rowserrcheck # 代码质量 - revive - varnamelen - exportloopref - forcetypeassert - govet - paralleltest - nlreturn - wastedassign - wrapcheck # 禁用的 linter linters-disable: - deadcode # 被 unused 替代 - varcheck # 被 unused 替代 - structcheck # 被 unused 替代 - interfacer # 已弃用 - maligned # 已弃用 - scopelint # 已弃用 # 问题配置 issues: # 排除规则 exclude-rules: # 排除测试文件的某些规则 - path: _test\.go linters: - funlen - gocyclo - dupl - gochecknoglobals - gochecknoinits # 排除生成的文件 - path: \.gen\.go$ linters: - lll - funlen - gocyclo # 排除错误处理中的简单错误检查 - path: .* text: "Error return value of `.*` is not checked" # 排除特定的 golangci-lint 注释 - path: .* text: "// nolint:.*" # 排除 context.Context 的未使用检查 - path: .* text: "context.Context should be the first parameter of a function" # 排除某些性能优化建议 - path: .* text: "predeclared" # 排除某些重复代码检查 - path: .* linters: - dupl text: "is duplicate of" # 最大问题数 max-issues-per-linter: 50 # 最大相同问题数 max-same-issues: 3 # 严重性配置 severity: # 默认严重性 default-severity: error # 规则严重性 rules: - linters: - dupl - gosec severity: warning - linters: - misspell - whitespace severity: info # 性能配置 performance: # 是否使用内存缓存 use-memory-cache: true # 缓存超时时间 cache-timeout: 5m