我有一個文件,其中包含一些應該在 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 關注
- 182 瀏覽
添加回答
舉報
0/150
提交
取消