我有一个文件,其中包含一些应该在 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
- 1 回答
- 0 关注
- 163 浏览
添加回答
举报
0/150
提交
取消