Go 代码检查工具 golangci-lint

一、介绍

golangci-lint 是一个代码检查工具的集合,聚集了多种 Go 代码检查工具,如 golintgo vet 等。

优点:

  • 运行速度快
  • 可以集成到 vscode、goland 等开发工具中
  • 包含了非常多种代码检查器
  • 可以集成到 CI 中
  • 这是包含的代码检查器列表:Linters

二、安装

golangci-lint 官方不建议使用 go get 方式安装,推荐使用二进制安装。

MacOS

直接使用 homebrew 安装:

brew install golangci-lint
brew upgrade golangci-lint

Linux 和 Windows

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

golangci-lint 将会被安装到 GOPATH/bin 目录中,如果此目录不在环境变量路径中需要加上。

三、使用方式

命令行

在项目根目录下执行以下命令检查整个项目的代码:

golangci-lint run

其等价于:

golangci-lint run ./...

或者可以指定检查某个目录下的代码文件,指定目录时不会递归分析其子目录,要递归分析其子目录需要加上 /…:

golangci-lint run dir1 dir2/... dir3/file1.go

在没有配置文件时,golangci-lint 会使用默认的代码检查器进行检查。

使用以下命令,可以查看默认启用和关闭了哪些检查器:

golangci-lint help linters

四、集成 IDE

1. Visual Studio Code

在 vscode 配置文件中新增以下内容:

"go.lintTool":"golangci-lint",
"go.lintFlags": ["--fast"

golangci-lint 会自动查找项目中的 .golangci.yml 配置文件,不用额外配置。

2. Goland

  1. 安装插件 Go Linter

可以在 Goland 内插件市场搜索 Go Linter 直接安装。

  1. 配置 File Watchers

在 Goland 配置页面的 工具 -> File Watchers 进行配置。
点 + 按钮,选择 golangci-lint 创建。

五、排除代码检查

  1. 有时候有部分代码因为各种原因不能通过代码检查,也不能修改,可以使用注释跳过代码检查。如下所示:

    var bad_name int //nolint
    var bad_name int //nolint:golint,unused
    
  2. 可以排除一整块代码:

    //nolint
    func allIssuesInThisFunctionAreExcluded() *string {// ...
    }//nolint:govet
    var (a intb int
    )
    
  3. 一整个文件:

    //nolint:unparam
    package pkg
    

六、配置文件

golangci-lint 会自动在当前目录下查找以下名称的配置文件:

.golangci.yml
.golangci.yaml
.golangci.toml
.golangci.json

配置启用的代码选择器

linters:disable-all: trueenable:- megacheck- govetenable-all: truedisable:- maligned- preallocpresets:- bugs- unusedfast: false

示例配置
以下是官方给出的配置文件示例,包含了可以设置的选项和选项的默认值:

# This file contains all available configuration options
# with their default values.# options for analysis running
run:# default concurrency is a available CPU numberconcurrency: 4# timeout for analysis, e.g. 30s, 5m, default is 1mtimeout: 1m# exit code when at least one issue was found, default is 1issues-exit-code: 1# include test files or not, default is truetests: true# list of build tags, all linters use it. Default is empty list.build-tags:- mytag# which dirs to skip: issues from them won't be reported;# can use regexp here: generated.*, regexp is applied on full path;# default value is empty list, but default dirs are skipped independently# from this option's value (see skip-dirs-use-default).# "/" will be replaced by current OS file path separator to properly work# on Windows.skip-dirs:- src/external_libs- autogenerated_by_my_lib# default is true. Enables skipping of directories:#   vendor$, third_party$, testdata$, examples$, Godeps$, builtin$skip-dirs-use-default: true# which files to skip: they will be analyzed, but issues from them# won't be reported. Default value is empty list, but there is# no need to include all autogenerated files, we confidently recognize# autogenerated files. If it's not please let us know.# "/" will be replaced by current OS file path separator to properly work# on Windows.skip-files:- ".*\\.my\\.go$"- lib/bad.go# by default isn't set. If set we pass it to "go list -mod={option}". From "go help modules":# If invoked with -mod=readonly, the go command is disallowed from the implicit# automatic updating of go.mod described above. Instead, it fails when any changes# to go.mod are needed. This setting is most useful to check that go.mod does# not need updates, such as in a continuous integration and testing system.# If invoked with -mod=vendor, the go command assumes that the vendor# directory holds the correct copies of dependencies and ignores# the dependency descriptions in go.mod.modules-download-mode: readonly|vendor|mod# Allow multiple parallel golangci-lint instances running.# If false (default) - golangci-lint acquires file lock on start.allow-parallel-runners: false# output configuration options
output:# colored-line-number|line-number|json|tab|checkstyle|code-climate|junit-xml|github-actions# default is "colored-line-number"format: colored-line-number# print lines of code with issue, default is trueprint-issued-lines: true# print linter name in the end of issue text, default is trueprint-linter-name: true# make issues output unique by line, default is trueuniq-by-line: true# add a prefix to the output file references; default is no prefixpath-prefix: ""# sorts results by: filepath, line and columnsort-results: false# all available settings of specific linters
linters-settings:cyclop:# the maximal code complexity to reportmax-complexity: 10# the maximal average package complexity. If it's higher than 0.0 (float) the check is enabled (default 0.0)package-average: 0.0# should ignore tests (default false)skip-tests: falsedogsled:# checks assignments with too many blank identifiers; default is 2max-blank-identifiers: 2dupl:# tokens count to trigger issue, 150 by defaultthreshold: 100errcheck:# report about not checking of errors in type assertions: `a := b.(MyStruct)`;# default is false: such cases aren't reported by default.check-type-assertions: false# report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`;# default is false: such cases aren't reported by default.check-blank: false# [deprecated] comma-separated list of pairs of the form pkg:regex# the regex is used to ignore names within pkg. (default "fmt:.*").# see https://github.com/kisielk/errcheck#the-deprecated-method for detailsignore: fmt:.*,io/ioutil:^Read.*# [deprecated] use exclude-functions instead.# path to a file containing a list of functions to exclude from checking# see https://github.com/kisielk/errcheck#excluding-functions for detailsexclude: /path/to/file.txt# list of functions to exclude from checking, where each entry is a single function to exclude.# see https://github.com/kisielk/errcheck#excluding-functions for detailsexclude-functions:- io/ioutil.ReadFile- io.Copy(*bytes.Buffer)- io.Copy(os.Stdout)errorlint:# Check whether fmt.Errorf uses the %w verb for formatting errors. See the readme for caveatserrorf: true# Check for plain type assertions and type switchesasserts: true# Check for plain error comparisonscomparison: trueexhaustive:# check switch statements in generated files alsocheck-generated: false# indicates that switch statements are to be considered exhaustive if a# 'default' case is present, even if all enum members aren't listed in the# switchdefault-signifies-exhaustive: falseexhaustivestruct:# Struct Patterns is list of expressions to match struct packages and names# The struct packages have the form example.com/package.ExampleStruct# The matching patterns can use matching syntax from https://pkg.go.dev/path#Match# If this list is empty, all structs are tested.struct-patterns:- '*.Test'- 'example.com/package.ExampleStruct'forbidigo:# Forbid the following identifiers (identifiers are written using regexp):forbid:- ^print.*$- 'fmt\.Print.*'# Exclude godoc examples from forbidigo checks.  Default is true.exclude_godoc_examples: falsefunlen:lines: 60statements: 40gci:# put imports beginning with prefix after 3rd-party packages;# only support one prefix# if not set, use goimports.local-prefixeslocal-prefixes: github.com/org/projectgocognit:# minimal code complexity to report, 30 by default (but we recommend 10-20)min-complexity: 10goconst:# minimal length of string constant, 3 by defaultmin-len: 3# minimum occurrences of constant string count to trigger issue, 3 by defaultmin-occurrences: 3# ignore test files, false by defaultignore-tests: false# look for existing constants matching the values, true by defaultmatch-constant: true# search also for duplicated numbers, false by defaultnumbers: false# minimum value, only works with goconst.numbers, 3 by defaultmin: 3# maximum value, only works with goconst.numbers, 3 by defaultmax: 3# ignore when constant is not used as function argument, true by defaultignore-calls: truegocritic:# Which checks should be enabled; can't be combined with 'disabled-checks';# See https://go-critic.github.io/overview#checks-overview# To check which checks are enabled run `GL_DEBUG=gocritic golangci-lint run`# By default list of stable checks is used.enabled-checks:- rangeValCopy# Which checks should be disabled; can't be combined with 'enabled-checks'; default is emptydisabled-checks:- regexpMust# Enable multiple checks by tags, run `GL_DEBUG=gocritic golangci-lint run` to see all tags and checks.# Empty list by default. See https://github.com/go-critic/go-critic#usage -> section "Tags".enabled-tags:- performancedisabled-tags:- experimental# Settings passed to gocritic.# The settings key is the name of a supported gocritic checker.# The list of supported checkers can be find in https://go-critic.github.io/overview.settings:captLocal: # must be valid enabled check name# whether to restrict checker to params only (default true)paramsOnly: trueelseif:# whether to skip balanced if-else pairs (default true)skipBalanced: truehugeParam:# size in bytes that makes the warning trigger (default 80)sizeThreshold: 80nestingReduce:# min number of statements inside a branch to trigger a warning (default 5)bodyWidth: 5rangeExprCopy:# size in bytes that makes the warning trigger (default 512)sizeThreshold: 512# whether to check test functions (default true)skipTestFuncs: truerangeValCopy:# size in bytes that makes the warning trigger (default 128)sizeThreshold: 32# whether to check test functions (default true)skipTestFuncs: trueruleguard:# path to a gorules file for the ruleguard checkerrules: ''truncateCmp:# whether to skip int/uint/uintptr types (default true)skipArchDependent: trueunderef:# whether to skip (*x).method() calls where x is a pointer receiver (default true)skipRecvDeref: trueunnamedResult:# whether to check exported functionscheckExported: truegocyclo:# minimal code complexity to report, 30 by default (but we recommend 10-20)min-complexity: 10godot:# comments to be checked: `declarations`, `toplevel`, or `all`scope: declarations# list of regexps for excluding particular comment lines from checkexclude:# example: exclude comments which contain numbers# - '[0-9]+'# check that each sentence starts with a capital lettercapital: falsegodox:# report any comments starting with keywords, this is useful for TODO or FIXME comments that# might be left in the code accidentally and should be resolved before mergingkeywords: # default keywords are TODO, BUG, and FIXME, these can be overwritten by this setting- NOTE- OPTIMIZE # marks code that should be optimized before merging- HACK # marks hack-arounds that should be removed before merginggofmt:# simplify code: gofmt with `-s` option, true by defaultsimplify: truegofumpt:# Select the Go version to target. The default is `1.15`.lang-version: "1.15"# Choose whether or not to use the extra rules that are disabled# by defaultextra-rules: falsegoheader:values:const:# define here const type values in format k:v, for example:# COMPANY: MY COMPANYregexp:# define here regexp type values, for example# AUTHOR: .*@mycompany\.comtemplate: # |-# put here copyright header template for source code files, for example:# Note: {{ YEAR }} is a builtin value that returns the year relative to the current machine time.## {{ AUTHOR }} {{ COMPANY }} {{ YEAR }}# SPDX-License-Identifier: Apache-2.0# Licensed under the Apache License, Version 2.0 (the "License");# you may not use this file except in compliance with the License.# You may obtain a copy of the License at:#   http://www.apache.org/licenses/LICENSE-2.0# Unless required by applicable law or agreed to in writing, software# distributed under the License is distributed on an "AS IS" BASIS,# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.# See the License for the specific language governing permissions and# limitations under the License.template-path:# also as alternative of directive 'template' you may put the path to file with the template sourcegoimports:# put imports beginning with prefix after 3rd-party packages;# it's a comma-separated list of prefixeslocal-prefixes: github.com/org/projectgolint:# minimal confidence for issues, default is 0.8min-confidence: 0.8gomnd:settings:mnd:# the list of enabled checks, see https://github.com/tommy-muehle/go-mnd/#checks for description.checks: argument,case,condition,operation,return,assign# ignored-numbers: 1000# ignored-files: magic_.*.go# ignored-functions: math.*gomoddirectives:# Allow local `replace` directives. Default is false.replace-local: false# List of allowed `replace` directives. Default is empty.replace-allow-list:- launchpad.net/gocheck# Allow to not explain why the version has been retracted in the `retract` directives. Default is false.retract-allow-no-explanation: false# Forbid the use of the `exclude` directives. Default is false.exclude-forbidden: falsegomodguard:allowed:modules:                                                        # List of allowed modules# - gopkg.in/yaml.v2domains:                                                        # List of allowed module domains# - golang.orgblocked:modules:                                                        # List of blocked modules# - github.com/uudashr/go-module:                             # Blocked module#     recommendations:                                        # Recommended modules that should be used instead (Optional)#       - golang.org/x/mod#     reason: "`mod` is the official go.mod parser library."  # Reason why the recommended module should be used (Optional)versions:                                                       # List of blocked module version constraints# - github.com/mitchellh/go-homedir:                          # Blocked module with version constraint#     version: "< 1.1.0"                                      # Version constraint, see https://github.com/Masterminds/semver#basic-comparisons#     reason: "testing if blocked version constraint works."  # Reason why the version constraint exists. (Optional)local_replace_directives: false                                 # Set to true to raise lint issues for packages that are loaded from a local path via replace directivegosec:# To select a subset of rules to run.# Available rules: https://github.com/securego/gosec#available-rulesincludes:- G401- G306- G101# To specify a set of rules to explicitly exclude.# Available rules: https://github.com/securego/gosec#available-rulesexcludes:- G204# Exclude generated filesexclude-generated: true# To specify the configuration of rules.# The configuration of rules is not fully documented by gosec:# https://github.com/securego/gosec#configuration# https://github.com/securego/gosec/blob/569328eade2ccbad4ce2d0f21ee158ab5356a5cf/rules/rulelist.go#L60-L102config:G306: "0600"G101:pattern: "(?i)example"ignore_entropy: falseentropy_threshold: "80.0"per_char_threshold: "3.0"truncate: "32"gosimple:# Select the Go version to target. The default is '1.13'.go: "1.15"# https://staticcheck.io/docs/options#checkschecks: [ "all" ]govet:# report about shadowed variablescheck-shadowing: true# settings per analyzersettings:printf: # analyzer name, run `go tool vet help` to see all analyzersfuncs: # run `go tool vet help printf` to see available settings for `printf` analyzer- (github.com/golangci/golangci-lint/pkg/logutils.Log).Infof- (github.com/golangci/golangci-lint/pkg/logutils.Log).Warnf- (github.com/golangci/golangci-lint/pkg/logutils.Log).Errorf- (github.com/golangci/golangci-lint/pkg/logutils.Log).Fatalf# enable or disable analyzers by name# run `go tool vet help` to see all analyzersenable:- atomicalignenable-all: falsedisable:- shadowdisable-all: falsedepguard:list-type: blacklistinclude-go-root: falsepackages:- github.com/sirupsen/logruspackages-with-error-message:# specify an error message to output when a blacklisted package is used- github.com/sirupsen/logrus: "logging is allowed only by logutils.Log"ifshort:# Maximum length of variable declaration measured in number of lines, after which linter won't suggest using short syntax.# Has higher priority than max-decl-chars.max-decl-lines: 1# Maximum length of variable declaration measured in number of characters, after which linter won't suggest using short syntax.max-decl-chars: 30importas:# if set to `true`, force to use alias.no-unaliased: true# List of aliasesalias:# using `servingv1` alias for `knative.dev/serving/pkg/apis/serving/v1` package- pkg: knative.dev/serving/pkg/apis/serving/v1alias: servingv1# using `autoscalingv1alpha1` alias for `knative.dev/serving/pkg/apis/autoscaling/v1alpha1` package- pkg: knative.dev/serving/pkg/apis/autoscaling/v1alpha1alias: autoscalingv1alpha1# You can specify the package path by regular expression,# and alias by regular expression expansion syntax like below.# see https://github.com/julz/importas#use-regular-expression for details- pkg: knative.dev/serving/pkg/apis/(\w+)/(v[\w\d]+)alias: $1$2ireturn:# ireturn allows using `allow` and `reject` settings at the same time.# Both settings are lists of the keywords and regular expressions matched to interface or package names.# keywords:# - `empty` for `interface{}`# - `error` for errors# - `stdlib` for standard library# - `anon` for anonymous interfaces# By default, it allows using errors, empty interfaces, anonymous interfaces,# and interfaces provided by the standard library.allow:- anon- error- empty- stdlib# You can specify idiomatic endings for interface- (or|er)$# Reject patternsreject:- github.com\/user\/package\/v4\.Typelll:# max line length, lines longer will be reported. Default is 120.# '\t' is counted as 1 character by default, and can be changed with the tab-width optionline-length: 120# tab width in spaces. Default to 1.tab-width: 1makezero:# Allow only slices initialized with a length of zero. Default is false.always: falsemaligned:# print struct with more effective memory layout or not, false by defaultsuggest-new: truemisspell:# Correct spellings using locale preferences for US or UK.# Default is to use a neutral variety of English.# Setting locale to US will correct the British spelling of 'colour' to 'color'.locale: USignore-words:- somewordnakedret:# make an issue if func has more lines of code than this setting and it has naked returns; default is 30max-func-lines: 30nestif:# minimal complexity of if statements to report, 5 by defaultmin-complexity: 4nilnil:# By default, nilnil checks all returned types below.checked-types:- ptr- func- iface- map- channlreturn:# size of the block (including return statement that is still "OK")# so no return split required.block-size: 1nolintlint:# Enable to ensure that nolint directives are all used. Default is true.allow-unused: false# Disable to ensure that nolint directives don't have a leading space. Default is true.allow-leading-space: true# Exclude following linters from requiring an explanation.  Default is [].allow-no-explanation: [ ]# Enable to require an explanation of nonzero length after each nolint directive. Default is false.require-explanation: true# Enable to require nolint directives to mention the specific linter being suppressed. Default is false.require-specific: trueprealloc:# XXX: we don't recommend using this linter before doing performance profiling.# For most programs usage of prealloc will be a premature optimization.# Report preallocation suggestions only on simple loops that have no returns/breaks/continues/gotos in them.# True by default.simple: truerange-loops: true # Report preallocation suggestions on range loops, true by defaultfor-loops: false # Report preallocation suggestions on for loops, false by defaultpromlinter:# Promlinter cannot infer all metrics name in static analysis.# Enable strict mode will also include the errors caused by failing to parse the args.strict: false# Please refer to https://github.com/yeya24/promlinter#usage for detailed usage.disabled-linters:#  - "Help"#  - "MetricUnits"#  - "Counter"#  - "HistogramSummaryReserved"#  - "MetricTypeInName"#  - "ReservedChars"#  - "CamelCase"#  - "lintUnitAbbreviations"predeclared:# comma-separated list of predeclared identifiers to not report onignore: ""# include method names and field names (i.e., qualified names) in checksq: falserowserrcheck:packages:- github.com/jmoiron/sqlxrevive:# see https://github.com/mgechev/revive#available-rules for details.ignore-generated-header: trueseverity: warningrules:- name: indent-error-flowseverity: warning- name: add-constantseverity: warningarguments:- maxLitCount: "3"allowStrs: '""'allowInts: "0,1,2"allowFloats: "0.0,0.,1.0,1.,2.0,2."staticcheck:# Select the Go version to target. The default is '1.13'.go: "1.15"# https://staticcheck.io/docs/options#checkschecks: [ "all" ]stylecheck:# Select the Go version to target. The default is '1.13'.go: "1.15"# https://staticcheck.io/docs/options#checkschecks: [ "all", "-ST1000", "-ST1003", "-ST1016", "-ST1020", "-ST1021", "-ST1022" ]# https://staticcheck.io/docs/options#dot_import_whitelistdot-import-whitelist:- fmt# https://staticcheck.io/docs/options#initialismsinitialisms: [ "ACL", "API", "ASCII", "CPU", "CSS", "DNS", "EOF", "GUID", "HTML", "HTTP", "HTTPS", "ID", "IP", "JSON", "QPS", "RAM", "RPC", "SLA", "SMTP", "SQL", "SSH", "TCP", "TLS", "TTL", "UDP", "UI", "GID", "UID", "UUID", "URI", "URL", "UTF8", "VM", "XML", "XMPP", "XSRF", "XSS" ]# https://staticcheck.io/docs/options#http_status_code_whitelisthttp-status-code-whitelist: [ "200", "400", "404", "500" ]tagliatelle:# check the struck tag name casecase:# use the struct field name to check the name of the struct taguse-field-name: truerules:# any struct tag type can be used.# support string case: `camel`, `pascal`, `kebab`, `snake`, `goCamel`, `goPascal`, `goKebab`, `goSnake`, `upper`, `lower`json: camelyaml: camelxml: camelbson: camelavro: snakemapstructure: kebabtestpackage:# regexp pattern to skip filesskip-regexp: (export|internal)_test\.gothelper:# The following configurations enable all checks. It can be omitted because all checks are enabled by default.# You can enable only required checks deleting unnecessary checks.test:first: truename: truebegin: truebenchmark:first: truename: truebegin: truetb:first: truename: truebegin: truetenv:# The option `all` will run against whole test files (`_test.go`) regardless of method/function signatures.# By default, only methods that take `*testing.T`, `*testing.B`, and `testing.TB` as arguments are checked.all: falseunparam:# Inspect exported functions, default is false. Set to true if no external program/library imports your code.# XXX: if you enable this setting, unparam will report a lot of false-positives in text editors:# if it's called for subdir of a project it can't find external interfaces. All text editor integrations# with golangci-lint call it on a directory with the changed file.check-exported: falseunused:# Select the Go version to target. The default is '1.13'.go: "1.15"whitespace:multi-if: false   # Enforces newlines (or comments) after every multi-line if statementmulti-func: false # Enforces newlines (or comments) after every multi-line function signaturewrapcheck:# An array of strings that specify substrings of signatures to ignore.# If this set, it will override the default set of ignored signatures.# See https://github.com/tomarrell/wrapcheck#configuration for more information.ignoreSigs:- .Errorf(- errors.New(- errors.Unwrap(- .Wrap(- .Wrapf(- .WithMessage(- .WithMessagef(- .WithStack(ignorePackageGlobs:- encoding/*- github.com/pkg/*wsl:# See https://github.com/bombsimon/wsl/blob/master/doc/configuration.md for# documentation of available settings. These are the defaults for# `golangci-lint`.allow-assign-and-anything: falseallow-assign-and-call: trueallow-cuddle-declarations: falseallow-multiline-assign: trueallow-separated-leading-comment: falseallow-trailing-comment: falseforce-case-trailing-whitespace: 0force-err-cuddling: falseforce-short-decl-cuddling: falsestrict-append: true# The custom section can be used to define linter plugins to be loaded at runtime.# See README doc for more info.custom:# Each custom linter should have a unique name.example:# The path to the plugin *.so. Can be absolute or local. Required for each custom linterpath: /path/to/example.so# The description of the linter. Optional, just for documentation purposes.description: This is an example usage of a plugin linter.# Intended to point to the repo location of the linter. Optional, just for documentation purposes.original-url: github.com/golangci/example-linterlinters:disable-all: trueenable:- megacheck- govetenable-all: truedisable:- maligned- preallocpresets:- bugs- unusedfast: falseissues:# List of regexps of issue texts to exclude, empty list by default.# But independently from this option we use default exclude patterns,# it can be disabled by `exclude-use-default: false`. To list all# excluded by default patterns execute `golangci-lint run --help`exclude:- abcdef# Excluding configuration per-path, per-linter, per-text and per-sourceexclude-rules:# Exclude some linters from running on tests files.- path: _test\.golinters:- gocyclo- errcheck- dupl- gosec# Exclude known linters from partially hard-vendored code,# which is impossible to exclude via "nolint" comments.- path: internal/hmac/text: "weak cryptographic primitive"linters:- gosec# Exclude some staticcheck messages- linters:- staticchecktext: "SA9003:"# Exclude lll issues for long lines with go:generate- linters:- lllsource: "^//go:generate "# Independently from option `exclude` we use default exclude patterns,# it can be disabled by this option. To list all# excluded by default patterns execute `golangci-lint run --help`.# Default value for this option is true.exclude-use-default: false# The default value is false. If set to true exclude and exclude-rules# regular expressions become case sensitive.exclude-case-sensitive: false# The list of ids of default excludes to include or disable. By default it's empty.include:- EXC0002 # disable excluding of issues about comments from golint# Maximum issues count per one linter. Set to 0 to disable. Default is 50.max-issues-per-linter: 0# Maximum count of issues with the same text. Set to 0 to disable. Default is 3.max-same-issues: 0# Show only new issues: if there are unstaged changes or untracked files,# only those changes are analyzed, else only changes in HEAD~ are analyzed.# It's a super-useful option for integration of golangci-lint into existing# large codebase. It's not practical to fix all existing issues at the moment# of integration: much better don't allow issues in new code.# Default is false.new: false# Show only new issues created after git revision `REV`new-from-rev: REV# Show only new issues created in git patch with set file path.new-from-patch: path/to/patch/file# Fix found issues (if it's supported by the linter)fix: trueseverity:# Default value is empty string.# Set the default severity for issues. If severity rules are defined and the issues# do not match or no severity is provided to the rule this will be the default# severity applied. Severities should match the supported severity names of the# selected out format.# - Code climate: https://docs.codeclimate.com/docs/issues#issue-severity# -   Checkstyle: https://checkstyle.sourceforge.io/property_types.html#severity# -       Github: https://help.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-error-messagedefault-severity: error# The default value is false.# If set to true severity-rules regular expressions become case sensitive.case-sensitive: false# Default value is empty list.# When a list of severity rules are provided, severity information will be added to lint# issues. Severity rules have the same filtering capability as exclude rules except you# are allowed to specify one matcher per severity rule.# Only affects out formats that support setting severity information.rules:- linters:- duplseverity: info

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/293554.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

泰克TDS3054B示波器 2 或 4 条通道

产品特点 500 MHz 、300 MHz 、100 MHz 三种带宽 取样速率高达 5 GS/s TDS3054B 数字示波器带宽500MHZ TDS3054B TDS3054B 数字示波器带宽500MHZ TDS3054B 2 或 4 条通道 全 VGA 彩色 LCD 显示 25 种自动测量功能 9 位垂直分辨率 TDS3054B 数字示波器带宽500MHZ TDS3054B TDS…

java练习题之多态练习

1:关于多态描述错误的是(D) A. 父类型的引用指向不同的子类对象 B. 用引用调用方法&#xff0c;只能调用引用中声明的方法 C. 如果子类覆盖了父类中方法&#xff0c;则调用子类覆盖后的方法 D. 子类对象类型会随着引用类型的改变而改变 2:class Super{ public void m1(){}…

16 寻找特定高度的地点

搜索二维数组 #include <iostream> using namespace::std; using std::cout; using std::cin; int main() {int n,m,target;cin >> n >> m;int matrix[n][m];for(int i0; i<n; i){for(int j0; j<m; j){cin >> matrix[i][j];}}cin >> tar…

C# WPF上位机开发(QT vs WPF)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 最近经常收到朋友们的私信&#xff0c;他们对C# WPF开发很感兴趣&#xff0c;但是呢&#xff0c;正当准备学习的时候&#xff0c;又有人告诉他们应…

核心订单链路兜底方案之限流熔断降级实战

需求场景 对于很多电商系统而言&#xff0c;在诸如双十一这样的大流量的迅猛冲击下&#xff0c;都曾经或多或少发生过宕机的情况。当一个系统面临持续的大流量时&#xff0c;它其实很难单靠自身调整来恢复状态&#xff0c;你必须等待流量自然下降或者人为地把流量切走才行&…

芯片到底是怎么访问外设

微型计算机的组成&#xff1a;CPURAM硬盘等 什么是FLASH&#xff1f; FLASH存储器又称闪存&#xff0c;它结合了ROM和RAM的长处&#xff0c;不仅具备电子可擦除可编程&#xff08;EEPROM&#xff09;的性能&#xff0c;还不会断电丢失数据同时可以快速读取数据&#xff08;NV…

Codeforces Round 862 (Div. 2)

Problem - A - Codeforces AC代码: #include<bits/stdc.h> #define endl \n //#define int long long using namespace std; const int N1e310; int a[N]; int n; void solve() {cin>>n;int ans0;for(int i1;i<n;i) cin>>a[i],ans^a[i];if(n%21){for(in…

PostGIS学习教程十四:更多的空间连接

PostGIS学习教程十四&#xff1a;更多的空间连接 在上一节中&#xff0c;我们看到了ST_Centroid(geometry)和ST_Union([geometry])函数&#xff0c;以及一些简单的示例。在本节中&#xff0c;我们将用它们做一些更详细的事情。 提示&#xff1a;写完文章后&#xff0c;目录可以…

成功案例分享:物业管理小程序如何助力打造智慧社区

随着科技的进步和互联网的普及&#xff0c;数字化转型已经渗透到各个行业&#xff0c;包括物业管理。借助小程序这一轻量级应用&#xff0c;物业管理可以实现线上线下服务的无缝对接&#xff0c;提升服务质量&#xff0c;优化用户体验。本文将详细介绍如何通过乔拓云网设计小程…

yolo-nas无人机高空红外热数据小目标检测(教程+代码)

前言 YOLO-NAS是目前最新的YOLO目标检测模型。从一开始&#xff0c;它就在准确性方面击败了所有其他 YOLO 模型。与之前的 YOLO 模型相比&#xff0c;预训练的 YOLO-NAS 模型能够以更高的准确度检测更多目标。但是我们如何在自定义数据集上训练 YOLO NAS&#xff1f; 这将是我…

Redis-学习笔记

Remote Dictionary Server(Redis) 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库&#xff0c;并提供多种语言的 API&#xff0c;是跨平台的非关系型数据库。 Redis 通常被称为数据结构服务器&…

视频监控技术经历了哪些发展阶段?视频监控技术未来趋势展望

随着城市经济的发展和进步&#xff0c;视频监控也已经应用在人们衣食住行的方方面面&#xff0c;成为社会主体的一个重要组成部分。随着视频监控的重要性越来越凸显&#xff0c;大家对视频监控技术的发展也非常关注。今天我们来简单阐述一下&#xff0c;视频监控技术经历的几个…