为了账号安全,请及时绑定邮箱和手机立即绑定

如果测试文件在 go 1.4 及以下的系统上运行,我该如何跳过它?

如果测试文件在 go 1.4 及以下的系统上运行,我该如何跳过它?

Go
慕哥9229398 2022-01-17 10:32:42
我有一个文件,其中包含一些应该在 Go 1.5+ 上运行的测试。我能够使用runtime.Version()并进行各种比较来获得 Go 运行时版本。但是,测试文件导入golang.org/x/net/http2. 该http2软件包需要request.Cancel()from net/http,但仅适用于 Go 1.5+。这会导致我的 CI 环境中出现这些错误,从而导致构建失败:../../../golang.org/x/net/http2/transport.go:214: req.Cancel undefined (type *http.Request has no field or method Cancel)../../../golang.org/x/net/http2/transport.go:218: req.Cancel undefined (type *http.Request has no field or method Cancel)../../../golang.org/x/net/http2/transport.go:777: req.Cancel undefined (type *http.Request has no field or method Cancel)我尝试添加// +build go1.5到文件的顶部,但没有奏效。无论如何我可以限制一个单元测试文件,以便它只在 Go 1.5+ 系统上构建和测试?
查看完整描述

1 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

构建约束是正确的方法。


但请注意,您的错误消息是指在 Go 1.6http2中添加的包,因此您至少需要构建约束。go1.6


构建约束


// +build go1.5

将导致使用Go 1.5 及更高版本编译文件。因此,如果您希望您的测试文件仅使用 Go 1.6 及更高版本编译和运行,请使用


// +build go1.6

也不要忘记:


约束可以出现在任何类型的源文件中(不仅仅是 Go),但它们必须出现在文件顶部附近,前面只能有空行和其他行注释。这些规则意味着在 Go 文件中,构建约束必须出现在 package 子句之前。


为了将构建约束与包文档区分开来,一系列构建约束后面必须跟一个空行。


一个工作示例:


1  // +build go1.6

2

3  package yourpackage


查看完整回答
反对 回复 2022-01-17
  • 1 回答
  • 0 关注
  • 163 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信