怎样使用gofmt格式化代码

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: **gofmt**是Go语言官方的代码格式化工具,确保代码遵循统一风格。它能读取标准输入或格式化指定文件及目录中的.go文件。使用`-s`参数可以简化代码,例如移除不必要的类型声明、索引指定和变量赋值。`-w`参数将格式化结果写回源文件。`go fmt`是`gofmt`的简单封装,通常带有`-l -w`参数。在Goland中,可通过设置File Watcher自动调用gofmt进行格式化。

gofmt介绍

Golang的开发团队制定了统一的官方代码风格,并且推出了gofmt工具(gofmt或go fmt)来帮助开发者格式化他们的代码到统一的风格。gofmt是一个cli程序,会优先读取标准输入,如果传入了文件路径的话,会格式化这个文件,如果传入一个目录,会格式化目录中所有.go文件,如果不传参数,会格式化当前目录下的所有.go文件。

gofmt默认不对代码进行简化,使用-s参数可以开启简化代码功能,具体来说会进行如下的转换:

  • 去除数组、切片、Map初始化时不必要的类型声明:

复制代码

如下形式的切片表达式:
    []T{T{}, T{}}
将被简化为:
    []T{{}, {}}
  • 去除数组切片操作时不必要的索引指定

复制代码

如下形式的切片表达式:
    s[a:len(s)]
将被简化为:
    s[a:]
  • 去除迭代时非必要的变量赋值

复制代码

如下形式的迭代:
    for x, _ = range v {...}
将被简化为:
    for x = range v {...}
如下形式的迭代:
    for _ = range v {...}
将被简化为:
    for range v {...}

gofmt命令参数列表如下:

复制代码

usage: gofmt [flags] [path ...]
  -cpuprofile string
        write cpu profile to this file
  -d    display diffs instead of rewriting files
  -e    report all errors (not just the first 10 on different lines)
  -l    list files whose formatting differs from gofmt's
  -r string
        rewrite rule (e.g., 'a[b:len(a)] -> a[b:]')
  -s    simplify code
  -w    write result to (source) file instead of stdout

可以看到,gofmt命令还支持自定义的重写规则,使用-r参数,按照pattern -> replacement的格式传入规则。

有如下内容的Golang程序,存储在main.go文件中。

复制代码

package main

import "fmt"

func main() {
   a := 1
   b := 2
   c := a + b
   fmt.Println(c)
}

用以下规则来格式化上面的代码。

复制代码

gofmt -r "a + b -> b + a"

格式化的结果如下。

复制代码

package main

import "fmt"

func main() {
   a := 1
   b := 2
   c := b + a
   fmt.Println(c)
}

*注意:Gofmt使用tab来表示缩进,并且对行宽度无限制,如果手动对代码进行了换行,gofmt也不会强制把代码格式化回一行。

go fmt和gofmt

gofmt是一个独立的cli程序,而go中还有一个go fmt命令,go fmt命令是gofmt的简单封装。

复制代码

usage: go fmt [-n] [-x] [packages]

Fmt runs the command 'gofmt -l -w' on the packages named
by the import paths. It prints the names of the files that are modified.
For more about gofmt, see 'go doc cmd/gofmt'.
For more about specifying packages, see 'go help packages'.
The -n flag prints commands that would be executed.
The -x flag prints commands as they are executed.
To run gofmt with specific options, run gofmt itself.

See also: go fix, go vet.

go fmt命令本身只有两个可选参数-n和-x,-n仅打印出内部要执行的go fmt的命令,-x命令既打印出go fmt命令又执行它,如果需要更细化的配置,需要直接执行gofmt命令。

go fmt在调用gofmt时添加了-l -w参数,相当于执行了gofmt -l -w

goland中配置gofmt

Goland是JetBrains公司推出的Go语言IDE,是一款功能强大,使用便捷的产品。

在Goland中,可以通过添加一个File Watcher来在文件发生变化的时候调用gofmt进行代码格式化,具体方法是,点击Preferences -> Tools -> File Watchers,点加号添加一个go fmt模版,Goland中预置的go fmt模版使用的是go fmt命令,将其替换为gofmt,然后在参数中增加-l -w -s参数,启用代码简化功能。添加配置后,保存源码时,goland就会执行代码格式化了。

转载来源:https://juejin.cn/post/7381455296658538559

相关文章
|
28天前
|
算法 C语言
C语言中的文件操作技巧,涵盖文件的打开与关闭、读取与写入、文件指针移动及注意事项
本文深入讲解了C语言中的文件操作技巧,涵盖文件的打开与关闭、读取与写入、文件指针移动及注意事项,通过实例演示了文件操作的基本流程,帮助读者掌握这一重要技能,提升程序开发能力。
102 3
|
4月前
|
JSON JavaScript 前端开发
成功解决:正则表达式在vscode中会自动格式化一部分
这篇文章讨论了在Visual Studio Code中编写正则表达式时遇到的问题,即正则表达式因自动格式化而变形,并提供了使用双反斜杠、确保在字符串中定义正则表达式、检查文件类型等解决方法来避免这一问题。
成功解决:正则表达式在vscode中会自动格式化一部分
|
5月前
webstorm【实用教程】代码自动格式,格式化时清除空行,修改使用代码模板
webstorm【实用教程】代码自动格式,格式化时清除空行,修改使用代码模板
475 2
|
6月前
|
文字识别 Linux 数据安全/隐私保护
掌握计算机自动化:Pyperclip与CnOCR详细教程(最全使用方法,每行代码都有注释,帮你解决与之有关的所有问题)
掌握计算机自动化:Pyperclip与CnOCR详细教程(最全使用方法,每行代码都有注释,帮你解决与之有关的所有问题)
|
6月前
|
编解码 机器人 关系型数据库
掌握计算机自动化:PyAutoGUI库详细教程(最全使用方法,每行代码都有注释,帮你解决与之有关的所有问题)
掌握计算机自动化:PyAutoGUI库详细教程(最全使用方法,每行代码都有注释,帮你解决与之有关的所有问题)
|
前端开发 JavaScript 编译器
2023年了,来试试前端格式化工具
eslint 使用eslint的生态链来规范开发者对js/ts基本语法的规范。防止团队的成员乱写. 这里主要使用到的eslint的包有以下几个: 使用的以下语句来按照依赖: 接下来需要对eslint的
|
数据格式 C++ Java
notepad++如何快速格式化代码
notepad++如何快速格式化代码
16467 0
|
SQL IDE 前端开发
神器你值得拥有——CoolFormat代码一键自动格式化工具,支持Verilog
神器你值得拥有——CoolFormat代码一键自动格式化工具,支持Verilog
427 0
神器你值得拥有——CoolFormat代码一键自动格式化工具,支持Verilog
|
IDE Java Linux
一键自动格式化你的代码
一键自动格式化你的代码
323 0
一键自动格式化你的代码
文本文件和二进制文件的区别,使用方法和检验方式
文本文件和二进制文件的区别,使用方法和检验方式
141 0