当前位置: 首页 > 面试题库 >

如果文件运行在go 1.4及更低版本的系统上,如何跳过该文件?

左丘繁
2023-03-14
问题内容

我有一个文件,其中包含一些应在Go 1.5+上运行的测试。

我可以使用runtime.Version()并进行各种比较来获取Go运行时版本。

但是,测试文件import 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+系统上对其进行构建和测试?


问题答案:

在构建约束是这样做的正确方法。

但是请注意,您的错误消息引用了Go
1.6
http2中添加的软件包,因此您至少需要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


 类似资料:
  • 我有这个PHP脚本,它将表单的内容与图像一起上传到数据库。现在,我想让它上传一切,当它被选中(作品),并跳过上传图像部分,上传一切,但图像,如果不是。 下面是在服务器上上传图像的部分。 当我尝试插入没有图像的表单内容时,它会返回: 警告:getimagesize():第14行C:\xampp\htdocs\vinhub\inc\addpost.inc.php中的文件名不能为空 文件不是图像。对不起

  • 我已经在Ubuntu 14.04上安装了hadoop。每当我将文件从本地文件系统复制到HDFS时,我都会出现以下错误。 我使用这个命令: 我遇到的错误是: 我是Linux环境的新手。我不明白哪个文件不存在。

  • 如果我们以RDD的形式处理存储在Spark本地磁盘中的一个大CSV文件(大小为1 GB),并将其重新划分到4个不同的分区,执行器会并行处理每个分区吗?如果我们不将RDD重新划分为4个不同的分区,执行器会怎么做?如果不使用HDFS,我们是否会失去分布式计算和并行性的能力?

  • 问题内容: 是否可以在任何操作系统(例如Windows,Linux,Mac OS X)上执行JAR文件?我想构建一个要在Linux,Windows和Mac OS X上运行的简单应用程序。JAR文件可以在安装了Java的任何操作系统上运行吗? 问题答案: Jar文件可在存在JVM的任何OS上运行。

  • 我有gradle多模块项目配置与kotlin脚本。我想添加发布到maven存储库,我找到了maven发布插件。但它似乎跳过了为每个项目配置的版本: : : 输出: 文件可以。如何使gradle获得模块的正确版本?

  • 问题内容: 我们曾经有一种从类路径上的文件加载属性的方法: 而且效果很好。但是现在我们要从不在类路径中的系统上的特定文件加载属性。我们希望能够动态加载文件,因此我们使用Java环境变量来填充它。我将在下面给出一个简单的示例: 在Java中: 在Spring XML中: 感谢Luciano的一个想法,我也尝试过这种方法: 我尝试过的一切都失败了。无论我将my.prop.file设置为什么。最热门的歌