1

我有一个用于 TypeScript 项目的脚本,可确保我的代码在我将其推送到远程之前编译:

simple_git_push_typescript(){
 (
    set -e

    top_level="$(git rev-parse --show-toplevel)"

    if [[ "$cm_ignore_tsc" != 'yes' ]]; then

        if [[ -f "$top_level/tsconfig.json" ]]; then
          (cd "$top_level" && tsc)  || { echo 'Could not compile with tsc. Did not push. Use "cm_ignore_tsc=yes" to override.'; exit 1; }
        fi
    fi

    git add -A

    if [[ "$cm_force_commit" == 'yes' ]]; then
       git commit --allow-empty -am "${1-tmp}"
    else
       git commit -am "${1-tmp}"  || echo 'Could not create new commit.';
    fi

    git push
 )
}

当我在一天结束时或在拉取请求之前将代码推送到我的功能分支时,该脚本工作得非常好——它有助于防止不必要的提交,但也使它变得容易。

使用 Go,我只想在将 go 项目推送到远程之前检查所有内容是否编译。

simple_git_push_go(){
  (
    set -e

    top_level="$(git rev-parse --show-toplevel)"

    (cd "$top_level" && go build -o '/dev/null' .)  # ?

     # ...
   )
}

Go build 是检查整个项目编译的最佳选择,还是查找所有 go 包并编译每个包的更通用方法?我想对于有多个未链接在一起的包的项目,那么您将不得不遍历每个包并分别编译它们?

4

1 回答 1

3

go build ./...在项目根目录中使用。这将递归到任何深度的子文件夹。

如果您还想确保测试文件也可以编译(并且测试通过),请运行:go test ./...

请注意,以下划线_或点开头的文件夹.将被忽略。

于 2020-02-23T19:53:27.340 回答