“生成”工具的发布打开了许多令人兴奋的可能性。我一直在努力让我的测试更好。我有一个查询外部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这是因为,当我编译生产代码时,源代码会被重写,因此用于测试的后续编译不再能够替换place (它已经被替换了)。
我意识到我在滥用gofmt,但我不想回到sed。什么是有效的go:generate语句?
发布于 2014-12-17 18:14:32
为此,可以使用链接器标志-X。例如,
go build -ldflags "-X main.APIURL 'http://example.com'"将APIURL变量设置为http://example.com来构建程序。
链接器文档中的更多信息。
Go 1.5编辑:从Go 1.5开始的,使用新格式的推荐:
go build -ldflags "-X main.APIURL=http://example.com"(请注意等号。)
发布于 2014-12-17 13:32:30
在您的测试文件中,假设api_test.go添加了一个generate命令,该命令生成另一个名为api_endpoint_test.go的文件,该文件位于同一个包中,并且只定义或(使用init函数)您需要的变量。该变量值将仅在测试期间使用。
作为记录,我不太明白为什么要这样做,而不是在运行时初始化变量,或者使用一些常规的配置方法。
https://stackoverflow.com/questions/27521611
复制相似问题