前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Go每日一库之122:gofumpt(增强代码格式化)

Go每日一库之122:gofumpt(增强代码格式化)

作者头像
luckpunk
发布2023-09-30 08:38:40
发布2023-09-30 08:38:40
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

前言

gofmt 是 golang 自带的代码自动格式化工具,是保证 Go 代码风格一致的大杀器。我们这次要推荐的 gofumpt 在 gofmt 的基础上添加了一系列更加严格的格式化规则,并保证了对 gofmt 的兼容

gofumpt 有助于进一步提升代码质量,它已经成为 gopls(Go 官方语言服务)中可选的格式化工具以及 golangci-lint 中支持的 linter,正在被越来越多优秀的开源项目(sourcegraph、gitlab 等)所使用。

gofumpt 简介

gofumpt(https://github.com/mvdan/gofumpt) fork 自 gofmt,支持与 gofmt 几乎相同的命令行参数,因此可以作为 gofmt 的直接替代品使用。gofumpt 是 gofmt 的“超集”,经过 gofumpt 格式化的代码也符合 gofmt 的要求,其本身所扩展的格式化规则也可能在后续被集成进 gofmt。

gofumpt 有以下特点:

更多的格式化规则(参见 https://github.com/mvdan/gofumpt#Added-rules) 默认跳过对 vendor 的格式化 不对自动生成的代码应用扩展规则 不支持 -r 参数 以上第 2、3 个特性对于格式化整个 go 工程来说尤其友好,在格式化代码的同时可以避免对自动生成代码(mock、proto 等)的入侵!

使用举例

安装 gofumpt:

代码语言:javascript
代码运行次数:0
复制
go install mvdan.cc/gofumpt@latest  

gofumpt 的用法与 gofmt 用法非常类似,使用过 gofmt 的同学上手会非常容易。gofumpt 的格式化规则扩展很多,下面只取几个典型的例子进行介绍:

注:以下例子均不会被 gofmt(1.17.2) 格式化

赋值运算符后不能有空行

代码语言:javascript
代码运行次数:0
复制
package demo

func foo() {
 foo :=
  "bar"
}

格式化后:

代码语言:javascript
代码运行次数:0
复制
package demo

func foo() {
 foo := "bar"
}

简单的错误检查之前不能有空行

代码语言:javascript
代码运行次数:0
复制
package demo

foo, err := processFoo()

if err != nil {
 return err
}

格式化后:

代码语言:javascript
代码运行次数:0
复制
package demo

foo, err := processFoo()
if err != nil {
 return err
}

标准库的导入必须位于顶部的单独组中

代码语言:javascript
代码运行次数:0
复制
package demo

import (
 "foo.com/bar"

 "io"

 "io/ioutil"
)

格式化后:

代码语言:javascript
代码运行次数:0
复制
package demo

import (
 "io"
 "io/ioutil"

 "foo.com/bar"
)

代码简化标志(-s)默认启用

代码语言:javascript
代码运行次数:0
复制
package demo

var _ = [][]int{[]int{1}}

格式化后:

代码语言:javascript
代码运行次数:0
复制
package demo

var _ = [][]int{{1}}

更多的例子请大家参考 https://github.com/mvdan/gofumpt#Added-rules

编辑器集成

gofumpt 除了作为命令行工具直接使用之外,还可以集成到编辑器中供我们使用,例如在 vscode 中集成 gofumpt 只需要以下配置:

代码语言:javascript
代码运行次数:0
复制
"go.useLanguageServer": true,
"gopls": {
 "formatting.gofumpt": true,
},

更多的编辑器集成请参考 https://github.com/mvdan/gofumpt#installation

总结

gofumpt 是一款优秀的 go 代码格式化扩展工具,能够帮助我们进一步提升代码质量,来试试看吧!

References

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • gofumpt 简介
  • 使用举例
    • 赋值运算符后不能有空行
    • 简单的错误检查之前不能有空行
    • 标准库的导入必须位于顶部的单独组中
    • 代码简化标志(-s)默认启用
    • 编辑器集成
  • 总结
  • References
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档