亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果測試文件在 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 關注
  • 182 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號