【发布时间】:2020-02-27 11:05:37
【问题描述】:
我不能称自己是 go 的绝对初学者,而且我绝对不是专家。
今天,我注意到一些非常令人困惑的事情。我正在试验 Unix 套接字和 Windows 命名管道,根据我的研究,有 2 个包支持 Windows 命名管道:
https://github.com/Microsoft/go-winio(我找不到任何关于此软件包的文档、帮助、使用方法)
我的操作系统是 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