发布 '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/