Go命令行—fmt

gofmt 可以格式化go代码。它使用制表符缩进和空白对齐。对齐功能会假定编辑器正在使用固定宽度的字体。

它会处理标准输入,不需要携带明确的路径参数。给定一个文件,它在该文件上运行;给定一个目录,它会递归地在该目录下的所有.go文件上运行(以句点开头的文件将被忽略)。默认情况下,gofmt将重新格式化的源打印到标准输出。

gofmt [flags] [path ...]

参数

-d
	不要将重新格式化的源打印到标准输出。
	如果一个文件的格式与gofmt不同,则打印差异
    到标准输出。
-e
	打印所有(包括虚假)错误。
-l
	不要将重新格式化的源打印到标准输出。
	如果文件的格式与gofmt不同,则打印其名称
    到标准输出。
-r rule
	重新格式化之前,将重写规则应用于源。
-s
	尝试简化代码(在应用重写规则之后,如果有的话)。
-w
	不要将重新格式化的源打印到标准输出。
	如果文件的格式与gofmt不同,则覆盖它 与gofmt的版本。
    如果在覆盖过程中发生错误, 原始文件从自动备份中恢复。

调试支持:

-cpuprofile filename
	将cpu配置文件写入指定的文件。

用-r标志指定的重写规则必须是以下格式的字符串:

pattern -> replacement

pattern 和 replacement 都必须是有效的Go表达式。在 pattern 中,单字符小写标识符用作匹配任意子表达式的通配符;这些表达式将替换 replacement 中的相同标识符。

当gofmt从标准输入读取时,它接受一个完整的Go程序或一个程序片段。程序片段必须是语法上有效的声明列表,语句列表或表达式。格式化这样一个片段时,gofmt保留了前导缩进以及前后空格,这样Go程序的各个部分就可以通过gofmt进行管道格式化。

示例

要检查文件中不必要的括号:

gofmt -r '(a) -> a' -l *.go

要删除括号:

gofmt -r '(a) -> a' -w *.go

将一系列包从显式切片上限转换为隐式切片:

gofmt -r 'α[β:len(α)] -> α[β:]' -w $GOROOT/src

简化命令

当调用-s gofmt时,将尽可能进行源代码转换。这可能会导致与早期版本的Go不兼容的更改。

BUGS

-r的执行有点慢。

如果-w失败,则恢复的原始文件可能不具有某些原始文件属性。