Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用gofmt生成,替换变量值_Go_Gofmt - Fatal编程技术网

使用gofmt生成,替换变量值

使用gofmt生成,替换变量值,go,gofmt,Go,Gofmt,该工具的发布带来了许多令人兴奋的可能性。 我一直在努力使我的考试更好。我有一个查询外部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:

该工具的发布带来了许多令人兴奋的可能性。 我一直在努力使我的考试更好。我有一个查询外部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
语句是什么?

在您的测试文件中说
api\u test.go
添加一个generate命令,该命令生成另一个名为
api\u endpoint\u test.go的文件,该文件位于同一个包中,并且只定义或初始化(使用
init
函数)您需要的变量。该变量值仅在测试期间使用



作为记录,我不太明白为什么要这样做,而不是在运行时初始化变量或使用一些常规配置方法。

您可以使用链接器标志
-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"

(请注意等号。)

经过广泛的搜索,我相当确定仅使用gofmt是不可能的。好消息是go generate可以在你的$PATH中运行任意脚本,这样你就可以让go generate运行sed或者其他任何东西了。我担心你会得出这样的结论。然后返回到
sed
。谢谢。是的,我认为唯一真正的方法是使用os.Expand或其他工具编写自己的生成脚本和模板,如果你能用sed完成同样的事情,你也可以用sed。