平台特定代码的解决方案是构建约束。注意:在 Go 1.17 之前,语法是以 开头的注释行// +build,但 Go 1.17 引入了//go:buildpragma 现在是首选方式。构建约束,也称为构建标记,是一行注释,以//go:build它列出了文件应包含在包中的条件。约束可以出现在任何类型的源文件中(不仅仅是 Go),但它们必须出现在文件顶部附近,前面只能有空行和其他行注释。这些规则意味着在 Go 文件中,构建约束必须出现在 package 子句之前。所以基本上每个平台特定的 Go 代码应该放在不同的文件中,你可以用它们的目标来标记每个 Go 文件。例如,如果文件包含 Linux 特定代码(例如系统调用),请以以下方式启动它://go:build linux如果文件包含特定于 Windows 的系统调用,请使用以下命令启动它://go:build windows有更多“选项”可用,请阅读链接的文档。例如,您可以指定对操作系统、架构、Go 版本、正在使用的编译器的约束。您还可以指定多个约束,这些约束将使用逻辑 OR 或 AND 进行解释,或者您可以使用否定(例如,此代码适用于除 linux 之外的每个目标平台)。您甚至.go可以使用以下约束标记要忽略的文件://go:build ignore请注意,构建约束是特定于编译器的。如果特定编译器无法识别构建约束,则编译器将忽略该文件。例如,Go AppEngine SDK 带有一个内置的、经过修改的 Go 编译器,它额外识别//go:build appengine约束,这意味着源文件仅适用于 Google App Engine 平台。“常规”Go 编译器将忽略该文件,如果有人尝试在没有 Go AppEngine SDK 的情况下构建代码,则您可能不会出现一堆编译器错误。