⭐️ 实用的 Golang 工具,让你的代码再次变得出色

2025-06-11

⭐️ 实用的 Golang 工具,让你的代码再次变得出色

介绍

大家好,令人惊叹的 DEV 朋友们!👋

上周我一直在重构我的 Go 项目。我意识到我竟然用同样的工具来检查所有地方的代码质量和安全性。没错,为了保持代码库的整洁有序,确实应该时不时地这样做(这不仅适用于编程,也适用于日常生活)。

🚀顺便说一句,本文并非讨论 VS Code 或类似Go插件中内置的 linters 和格式化程序!这些是来自不同作者的不同项目,你可以将它们添加到你的编程周期中。

那么,为什么不告诉我的读者一些有用的工具呢?快来试试吧!👇

📝 目录

为什么它很重要以及我对 Go 项目的愿景

我必须告诉你:我喜欢写代码。但更重要的是,我喜欢阅读其他开发人员写的结构化代码。

为什么?它有助于更​​好地理解作者,采用有用的技术和方法,以及理解特定功能和整个包的工作!

因此,我非常注重工具的使用,以便于更容易地编写代码,并最终方便之后阅读代码。我鼓励你也谨慎使用我在本文中介绍的技巧和工具……毕竟,你写的代码可能还在被别人阅读。

↑ 目录

正确设置环境

首先,.editorconfig我的所有 Go 项目的默认设置如下所示:

# ./.editorconfig

root = true

[*] # <-- rules for all files
indent_style = space
indent_size = 2
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[{go.mod,go.sum,*.go}] # <-- rules only for Go's project files
indent_style = tab
indent_size = 4

# ...other rules...
Enter fullscreen mode Exit fullscreen mode

第二点,但与第一点同样重要,始终使用默认设置更新Visual Studio CodeGo 插件我上面提到过)。

vs 代码 go

↑ 目录

gosec 包

gosec通过扫描 Go AST 检查源代码是否存在安全问题。此软件包包含30多种不同的规则,可用于测试 Go 代码的安全性。

☝️注意:在计算机科学中,抽象语法树(AST)或语法树是用编程语言编写的源代码的抽象语法结构的树形表示。

GitHub 徽标 securego / gosec

前往安全检查器

下面是我的一个项目中的示例。我gosec ./...在模块的根目录中调用该命令:

[gosec] 2021/10/25 18:03:37 Including rules: default
[gosec] 2021/10/25 18:03:37 Excluding rules: default
[gosec] 2021/10/25 18:03:37 Import directory: /Users/koddr/Code/project/api/app/models
[gosec] 2021/10/25 18:03:37 Checking package: models

# ...list of all *.go files...

Results:

[/Users/koddr/Code/project/api/platform/cdn/digitalocean_spaces.go:62] - G304 (CWE-22): Potential file inclusion via variable (Confidence: HIGH, Severity: MEDIUM)
    61:         // Open the file from system path.
  > 62:         file, errOpen := os.OpenFile(pathToFile, os.O_RDONLY, 0o600)
    63:         if errOpen != nil {

Summary:
  Gosec  : 2.9.1
  Files  : 29
  Lines  : 2760
  Nosec  : 0
  Issues : 1
Enter fullscreen mode Exit fullscreen mode

这给了我很多修复它的信息!你可以用Golang 内置的函数包装pathToFile变量,轻松修复这部分代码。filepath.Clean()

🤔注意:是的,乍一看这可能看起来很奇怪,但如果你曾经在生产中运行过 Go 项目,你就会明白为什么你不能把这些东西排除在你的代码之外。

↑ 目录

go-critic 包

go-critic是一系列用于检测代码风格、性能问题以及一些常见编程错误的检查工具。它提供了尽可能多的实用检查。这个出色的工具不仅可以显示 Go 代码中存在问题的部分,还能告诉您应该用什么来替换它。

GitHub 徽标 去批评家/去批评家

用于代码审计的最有主见的 Go 源代码 linter。

例如,让我们运行gocritic check -enableAll ./...流行的 Swagger 文档生成器包swaggo/swag

./operation.go:1033:24: ioutilDeprecated: ioutil.ReadFile is deprecated, use os.ReadFile instead

./parser.go:604:1: paramTypeCombine: func(tagName string, dirPath string) ([]byte, error) could be replaced with func(tagName, dirPath string) ([]byte, error)

./packages.go:41:5: emptyStringTest: replace `len(packageDir) == 0` with `packageDir == ""`

# ...and over 20 more...
Enter fullscreen mode Exit fullscreen mode

如果目前您不需要某个规则组,只需通过disable带有标签的标志将其禁用,如下所示:

gocritic check -disable='#style' ./...
Enter fullscreen mode Exit fullscreen mode

支持的标签(始终启用):

  • #diagnostic— 检测各种错误的检查类型
  • #style— 发现样式问题的检查类型
  • #performance— 检测潜在性能问题的检查类型
  • #security— 发现安全问题的检查类型

以及默认禁用的标签(通过-enable='<TAG>'带有特定标签的标志启用它,或使用-enableAll标志):

  • #experimental— 检查正在测试和开发中
  • #opinionated— 有些人可能不想要支票

要关闭特定规则,只需运行此命令:

gocritic check -disable=emptyStringTest ./...
Enter fullscreen mode Exit fullscreen mode

☝️注意:您可以在此处找到所有规则的完整列表

↑ 目录

golangci-lint 包

golangci-lint是一款快速的 Go 代码检查器。该软件包的大多数安装都是为 CI 执行的,但您也可以将其用作您常用的 IDE 中的标准代码检查器。

GitHub 徽标 golangci / golangci-lint

Go 的快速 linters 运行器

主要优点:

  1. 并行运行 linters,重用 Go 构建缓存并缓存分析结果
  2. 基于 YAML 的配置
  3. 包含许多 linters,无需安装
  4. 由于调整了默认设置,误报数量最少
  5. 带有颜色、源代码行和标记标识符的漂亮输出

是的,就我个人而言,我经常将它与 GitHub Actions 一起使用来检查存储库中项目的所有传入 PR。

📌注意:如果您错过了,这里有我的一系列文章,它们将为您提供有关 GitHub Actions 的深入了解和实践。

Actions 的配置文件如下所示,例如:

# ./.github/workflows/golangci-lint.yml

name: golangci-lint
on:
  push:
    branches:
      - master
  pull_request:

jobs:
  golangci:
    name: lint
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: golangci-lint
        uses: golangci/golangci-lint-action@v2
        with:
          version: latest
          only-new-issues: true
  # ...
Enter fullscreen mode Exit fullscreen mode

开发人员提供的一个小演示,golangci-lint展示了 Beego Web 框架的问题区域(通过golangci-lint run命令):

图片描述

↑ 目录

然后

希望本文对您有所帮助。如果您还有其他检查和格式化代码的好工具,请在评论区留言。别忘了花点时间,让您的代码再次变得优秀。

非常值得! 😉

↑ 目录

照片和视频来自

  • 工具作者和 Vic Shóstak

聚苯乙烯

如果你想在本博客上看到更多类似的文章,请在下方留言并订阅我。谢谢!😻

❗️ 您可以在Boosty上支持我,可以是永久支持,也可以是一次性支持。所有收益都将用于支持我的开源项目,并激励我为社区创作新的产品和文章。

在 Boosty 上支持我

当然,你也可以帮助我改善开发者的生活!只需以贡献者的身份连接到我的一个项目即可。非常简单!

我的主要项目需要您的帮助(和星星)👇

  • 🔥 gowebly:下一代 CLI 工具,可轻松使用 Go 在后端创建出色的 Web 应用程序,使用 htmx、hyperscript 或 Alpine.js 以及前端最流行的 CSS 框架。
  • create-go-app:通过运行一个 CLI 命令,创建一个具有 Go 后端、前端和部署自动化的新的生产就绪项目。

我的其他小项目:yatrgosljson2csvcsv2api

鏂囩珷鏉ユ簮锛�https://dev.to/koddr/helpful-golang-tools-to-make-your-code-great-again-3739
PREV
React 测试驱动开发入门指南(面向初学者)
NEXT
使用 Validator V10 进行 Go 输入验证的指南