go generate with gofmt,替换变量值

标签 go gofmt

发布 'generate'工具开辟了很多令人兴奋的可能性。 我一直在努力使我的测试更好。我有一个查询外部 API 的函数,该 API 的位置在全局变量中定义。难题之一是将该值替换为在“生成时”确定的值。

我有:

//go:generate gofmt -w -r "var apiUrl = a -> var apiUrl = \"http://example.com\"" $GOFILE

运行 go generate 然后出错:

parsing pattern var apiUrl = a  at 1:1: expected operand, found 'var'

不能像这样使用占位符:

gofmt -r 'API_GOES_HERE -> "http://example.com"' -w

那是因为,当我编译生产代码时,源代码被重写了,所以后续的测试编译不能再替换占位符(它已经被替换了)。

我意识到我在某种程度上滥用了 gofmt,但我不想回到 sed。 什么是有效的 go:generate 语句?

最佳答案

您可以为此使用链接器标志 -X。例如,

go build -ldflags "-X main.APIURL 'http://example.com'"

将使用 APIURL 变量设置为 http://example.com 构建您的程序。

More info in the linker docs .


Go 1.5 编辑:从 Go 1.5 开始,它是 recommended使用新格式:

go build -ldflags "-X main.APIURL=http://example.com"

(注意等号。)

关于go generate with gofmt,替换变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27521611/

相关文章:

git - 在每次提交时分别运行 go fmt 时,是否有任何工具会重新设置 Git 中的分支?

go - 无法从 Golang 运行 Shellscript

logging - 如何从正在运行的 Docker 容器中读取文件和标准输出

go - 使用更新的 CommonName 重新生成新的 x509 证书

go - 在没有插件的情况下在 vim 上运行 gofm

datetime - 打印耗时时如何抑制日期

arrays - 组合公共(public)前缀子串

mongodb - FindOneAndUpdate函数不更新数据库

go - 终端输入与预期结果不符

go - 保存 Hook 上的 Emacs Golang gofmt - 不格式化