繁体   English   中英

查看go代码是否被格式化

[英]Checking to find out if go code has been formatted

我的目标是在提交时强制格式化 go 源代码。 有没有办法查明在一个文件/一组文件上运行go fmt是否会进行任何更改? 我能想到的唯一技术是:

  • 存储当前时间t
  • 在源上运行 go fmt
  • 迭代源文件以查看是否有任何最后的修改日期 > t

我可以编写一个工具/脚本来执行此操作并在循环 CI 构建期间执行。 我想在 go 之前检查我是否没有重新发明轮子。

根据gofmt -h您可以使用-l选项:

-l 列出格式与 gofmt 不同的文件

类似的东西:

> gofmt -l .

并进一步传递收到的文件列表。

我找到了这个预提交钩子

#!/bin/sh

gofiles=$(git diff --cached --name-only --diff-filter=ACM | grep '\.go$')
[ -z "$gofiles" ] && exit 0

unformatted=$(gofmt -l $gofiles)
[ -z "$unformatted" ] && exit 0

# Some files are not gofmt'd. Print message and fail.

echo >&2 "Go files must be formatted with gofmt. Please run:"
for fn in $unformatted; do
    echo >&2 "  gofmt -w $PWD/$fn"
done

exit 1

如果你希望失败时退出代码为1,并且能够在Linux或Mac或其他Unix操作系统上运行,你可以使用:

files=$(gofmt -l .) && [ -z "$files" ]

为@u_mulder 的答案添加其他信息。

如果您希望退出代码在失败时为 1,则可以使用

test -z $(gofmt -l .)

这对 CI 很有帮助。 但是,这不会列出不同文件的列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM