Go 语言项目开发实战
孔令飞
腾讯云专家工程师,前 Red Hat、联想云工程师
41030 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 61 讲
Go 语言项目开发实战
15
15
1.0x
00:00/00:00
登录|注册

16 | 代码检查:如何进行静态代码检查?

golangci-lint使用技巧
常见的golangci-lint使用方法
配置文件
命令行选项
linters命令
config命令
completion命令
cache命令
run命令
良好的输出
最小的误报数
linter聚合器
IDE集成
可配置
速度非常快
课后练习
如何使用golangci-lint进行静态代码检查?
golangci-lint配置
golangci-lint提供了哪些命令和选项?
为什么选择golangci-lint做静态代码检查?
golangci-lint
静态代码检查
如何进行静态代码检查?

该思维导图由 AI 生成,仅供参考

你好,我是孔令飞。上一讲中,我在讲代码开发的具体步骤时,提到了静态代码检查,今天我就来详细讲讲如何执行静态代码检查。
在做 Go 项目开发的过程中,我们肯定需要对 Go 代码做静态代码检查。虽然 Go 命令提供了 go vet 和 go tool vet,但是它们检查的内容还不够全面,我们需要一种更加强大的静态代码检查工具。
其实,Go 生态中有很多这样的工具,也不乏一些比较优秀的。今天我想给你介绍的 golangci-lint,是目前使用最多,也最受欢迎的静态代码检查工具,我们的 IAM 实战项目也用到了它。
接下来,我就从 golangci-lint 的优点、golangci-lint 提供的命令和选项、golangci-lint 的配置这三个方面来向你介绍下它。在你了解这些基础知识后,我会带着你使用 golangci-lint 进行静态代码检查,让你熟悉操作,在这个基础上,再把我使用 golangci-lint 时总结的一些经验技巧分享给你。

为什么选择 golangci-lint 做静态代码检查?

选择 golangci-lint,是因为它具有其他静态代码检查工具不具备的一些优点。在我看来,它的核心优点至少有这些:
速度非常快:golangci-lint 是基于 gometalinter 开发的,但是平均速度要比 gometalinter 快 5 倍。golangci-lint 速度快的原因有三个:可以并行检查代码;可以复用 go build 缓存;会缓存分析结果。
可配置:支持 YAML 格式的配置文件,让检查更灵活,更可控。
IDE 集成:可以集成进多个主流的 IDE,例如 VS Code、GNU Emacs、Sublime Text、Goland 等。
linter 聚合器:1.41.1 版本的 golangci-lint 集成了 76 个 linter,不需要再单独安装这 76 个 linter。并且 golangci-lint 还支持自定义 linter。
最小的误报数:golangci-lint 调整了所集成 linter 的默认设置,大幅度减少了误报。
良好的输出:输出的结果带有颜色、代码行号和 linter 标识,易于查看和定位。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

golangci-lint是一款强大的静态代码检查工具,具有灵活性和自定义配置的优点。本文详细介绍了golangci-lint的安装方法、命令和选项,以及配置文件内容和使用技巧。读者可以通过命令行选项和配置文件灵活地配置golangci-lint,包括忽略文件和文件夹、启用/禁用linter、输出格式等。文章还展示了如何使用golangci-lint进行静态代码检查,包括对指定文件或目录进行检查、减少误报和使用nolint标记来开关某些检查项。此外,作者分享了一些使用golangci-lint的经验技巧,如按目录修改、按文件修改、设置linter的line-length等。总之,本文内容详实,适合Go项目开发者快速了解和使用golangci-lint进行静态代码检查。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 语言项目开发实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(12)

  • 最新
  • 精选
  • helloworld
    我使用vim+ale+golangci-lint做Go的静态代码检查,编写代码的过程中保存文件时自动触发检查,第一时间在文件内就给出了错误或警告的提示信息,直接按提示修复即可,基本上用不着在命令行执行golangci-lint命令。而且配置了package级别的检查,不存在因单文件检查出现的误报。

    作者回复: 在ide中集成,每个文件都检查,非常好的思路。但Ci的时间也需要用到golangci-lint。

    2021-07-01
    11
  • demon
    如果使用的IDE像goland这种,自身就带静态代码检查吧?

    作者回复: goland也是需要配置的。

    2021-07-03
    2
    3
  • lesserror
    孔老板,这句话没太理解:“首先,如果启用了 nolintlint,你就需要在//nolint后面添加 nolint 的原因// xxxx。” 麻烦能再解释一下吗?

    作者回复: nolintlint:用来检查//nolint的格式是否是// nolint: gomnd // xxx这种格式。xxx是nolint的原因,例如: // nolint:unused // may be reused in the feature, or just show a migrate usage. nolintlint可以再.golangci.yaml文件中启用和设置: nolintlint: # Enable to ensure that nolint directives are all used. Default is true. allow-unused: true # 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: false # Enable to require nolint directives to mention the specific linter being suppressed. Default is false. require-specific: true

    2021-10-03
    2
    2
  • HappyHasson
    如何在 golangci-lint 中集成自定义的 linter?

    作者回复: https://golangci-lint.run/contributing/new-linters/ 看下这篇文章

    2022-06-24归属地:广东
    1
  • 咖梵冰雨
    "D:\Program Files\Go\bin\golangci-lint.exe" run D:\www\golang\test\main.go level=error msg="Running error: context loading failed: failed to load packages: failed to load with go/packages: err: go resolves to executable in current directory (.\\go.exe): stderr: " window golang 配置external Tools报这个错误,请问是什么原因

    作者回复: 看下是不是go的安装路径有问题,不是标准的二进制存放路径。其实你这个问题,我没有遇到过,但我网上搜到了相似的问题,里面会有你想要的解释: https://gocn.vip/topics/11648 像这种错误,你可以自己尝试先解决,解决的过程也是学习的过程

    2021-11-11
    1
  • Jone_乔泓恺
    老师:文中【技巧 4:尽可能多地使用 golangci-lint 提供的 linter】 中的两个查看 linters 的命令是不是放反了? 【golangci-lint 集成了很多 linters,可以通过如下命令查看:】`golangci-lint help linters` 【如果配置了 golangci-lint 配置文件,则可以通过命令golangci-lint help linters查看在当前配置下启用和禁用了哪些 linter】`golangci-lint linters`

    作者回复: 感谢反馈,是写反了,我修复下

    2022-07-05归属地:广东
  • HappyHasson
    怎么联系老师呢,有项目问题想请教?

    作者回复: 老师微信nightskong

    2022-06-26归属地:广东
  • Sch0ng
    使用golangci-lint做静态代码检查。检查速度快,功能强大,配置灵活,社区活跃,许多大公司在用。 静态代码检查可以守住代码质量的底线。
    2021-08-10
    3
  • yk
    贼有用
    2021-09-18
    1
  • __PlasticMan
    print_enable_linters.sh脚本可以改一下,输出的行为` - <linter name> # <linter description>`,这样在配置文件中可以比较方便地看到linter的用途: ```shell #!/usr/bin/env bash disable=( golint tagliatelle wrapcheck forcetypeassert goerr113 gomnd wsl testpackage gochecknoglobals interfacer maligned scopelint gocritic ) OLD_IFS=${IFS} IFS=$'\n' all=(`golangci-lint linters | awk -F':| ' '!match($0, /Enabled|Disabled|^$/){printf("%s # %s\n",$1,$0)}' | sort`) for item in ${all[@]} do if ! echo "${disable[@]}" | grep -w `echo "${item}" | awk -F' # ' '{print $1}'` &> /dev/null; then echo " - ${item}" fi done IFS=${OLD_IFS} ```
    2023-08-13归属地:四川
收起评论
显示
设置
留言
12
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部