首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用gofmt生成,替换变量值。

使用gofmt生成,替换变量值。
EN

Stack Overflow用户
提问于 2014-12-17 08:56:20
回答 2查看 704关注 0票数 4

“生成”工具的发布打开了许多令人兴奋的可能性。我一直在努力让我的测试更好。我有一个查询外部API的函数,该API的位置是在全局变量中定义的。拼图的一个部分是用在“生成时间”处确定的值替换该值。

我有:

代码语言:javascript
复制
//go:generate gofmt -w -r "var apiUrl = a -> var apiUrl = \"http://example.com\"" $GOFILE

运行go generate,然后用以下方法输出错误:

代码语言:javascript
复制
parsing pattern var apiUrl = a  at 1:1: expected operand, found 'var'

使用这样的位置持有者不是一种选择:

代码语言:javascript
复制
gofmt -r 'API_GOES_HERE -> "http://example.com"' -w

这是因为,当我编译生产代码时,源代码会被重写,因此用于测试的后续编译不再能够替换place (它已经被替换了)。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-17 18:14:32

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

代码语言:javascript
复制
go build -ldflags "-X main.APIURL 'http://example.com'"

APIURL变量设置为http://example.com来构建程序。

链接器文档中的更多信息

Go 1.5编辑:从Go 1.5开始的,使用新格式的推荐

代码语言:javascript
复制
go build -ldflags "-X main.APIURL=http://example.com"

(请注意等号。)

票数 3
EN

Stack Overflow用户

发布于 2014-12-17 13:32:30

在您的测试文件中,假设api_test.go添加了一个generate命令,该命令生成另一个名为api_endpoint_test.go的文件,该文件位于同一个包中,并且只定义或(使用init函数)您需要的变量。该变量值将仅在测试期间使用。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27521611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档