【问题标题】:Does go have OS-specific packages that cannot be used on another OS?Go 是否有无法在其他操作系统上使用的特定于操作系统的软件包?
【发布时间】:2020-02-27 11:05:37
【问题描述】:

我不能称自己是 go 的绝对初学者,而且我绝对不是专家。

今天,我注意到一些非常令人困惑的事情。我正在试验 Unix 套接字和 Windows 命名管道,根据我的研究,有 2 个包支持 Windows 命名管道:

我的操作系统是 Linux,我决定试一试:go get 软件包,然后编写代码以便稍后在 Windows 机器上进行测试,但令我惊讶的是,至少在 VSCode 中,那些工具无法识别包。

例如,当我查看npipe 时,我发现它只有npipe_windows.go,如果我没记错的话,它应该会自动在Windows 上使用。

所以,我认为 Go 中有特定于操作系统的包的概念,对吧?如果是这样,是否意味着我不能使用 VSCode 的 go 工具来针对 Linux 上的 Windows 包进行编码?

在我看来,为了编写可以在 Linux 和 Windows 上运行的东西而不得不切换系统会非常不方便......虽然我想这只有在我们在 Linux 上开发时才是正确的,而 Windows 应该覆盖两者。

但对我来说,不能在 Linux 上开发东西是没有意义的;在 IMHO 上开发的最佳环境(当然苹果相关代码除外)

我错过了什么吗?

谢谢

【问题讨论】:

  • 参见build constraints 了解在不同平台上的条件编译文件。有关如何在 Linux 和其他平台上构建 Windows 程序的信息,请参阅Windows Cross Compiling
  • 注意 _linux、_windows 和 _darwin 文件名后缀,它们允许简单的操作系统特定编译。
  • 您可以在godoc 上找到文档,但您已经需要了解很多特定于 Windows 的术语
  • 感谢大家的cmets。我已经找到了// +build 注释和文件后缀,但我的问题和疑问是:如果我有一个使用这些功能的包(例如只有一个_windows 文件),我无法获得工具在 Linux 开发环境中支持(IntelliSense 等)?
  • 这个问题完全特定于所涉及的工具 - 如果这是您唯一遇到的问题,那么这与其说是 Go 包问题,不如说是 VS Code 问题。 Go 本身可以很好地处理这个问题,只是你的工具有问题。您可能可以覆盖它正在使用的构建命令的构建标志,但对于代码完成之类的事情可能会变得更加复杂 - 它可能会以多种方式扫描代码以查找符号,并且您将拥有不同的配置选项,具体取决于您的内容重新使用。

标签: linux windows go cross-platform go-packages


【解决方案1】:

所以,我认为我的问题实际上更多地涉及工具而不是 go 语言本身。如果你选择使用go语言服务器,gopls是VSCode使用的工具。

正如README 所说,它在alpha 中并且不稳定,并且回购中列出了known issues,这似乎是我困惑的根源。

我认为与我所看到的有关的主要问题是:

x/tools/gopls: does not handle build tags

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-17
    • 1970-01-01
    • 2013-05-31
    • 2010-11-12
    相关资源
    最近更新 更多