这个命令“GOFLAGS=-mod=mod”有什么作用?

Har*_*mar 6 yaml backend go go-cobra go-build

我正在尝试制作一个 Taskfile.yml 文件来构建 go 应用程序,但我不太明白在 go build main.go 之前需要“GOFLAGS=-mod=mod”命令。

参考: https: //dev.to/aurelievache/learning-go-by-examples-part-3-create-a-cli-app-in-go-1h43

Asw*_*jan 8

所以这里有两件事

  • GOFLAGS
    • 这只不过是一个环境变量(如果您不明白什么是环境变量,请将其视为可以被当前环境中的任何进程访问的值。这些值由操作系统维护)。
    • 因此这个GOFLAGS变量有一个空格分隔的标志列表,这些标志将自动传递给适当的 go 命令。
    • 我们这里设置的标志是mod,这个标志适用于该go build命令,可能不适用于其他 go 命令。
    • 如果您好奇go这是如何做到的,请参阅此更改请求
    • 由于我们在命令中提到了这一点,因此该环境变量是临时设置的,实际上并未导出。
  • 设置-mod=modflag, 期间实际上做了什么go build
    • -mod标志控制 go.mod 是否可以自动更新以及是否使用供应商目录。
    • -mod=mod告诉 go 命令忽略供应商目录并自动更新 go.mod,例如,当任何已知模块未提供导入的包时。
    • 参考这个

所以

GOFLAGS="-mod=mod" go build main.go
Run Code Online (Sandbox Code Playgroud)

相当于

go build -mod=mod main.go
Run Code Online (Sandbox Code Playgroud)