这是我目前正在使用的,我认为它可以完成工作,但必须有更好的方法:
func isWindows() bool {
return os.PathSeparator == '\\' && os.PathListSeparator == ';'
}
如您所见,在我的例子中,我只需要知道如何检测窗口,但我想知道检测任何平台/操作系统的方法。
玩:
http://play.golang.org/p/r4lYWDJDxL
原文由 mdwhatcott 发布,翻译遵循 CC BY-SA 4.0 许可协议
编译时检测
如果您这样做是为了根据操作系统获得不同的实现,那么使用单独的文件来实现该功能并向每个文件添加构建标签会更有用。这在标准库中的许多地方都有使用,例如 在
os
包 中。这些所谓的“Build constraints”或“Build tags”在 这里 解释。
假设您有常量
PATH_SEPARATOR
并且您希望它依赖于平台,您将创建两个文件,一个用于 Windows,一个用于 (UNIX) rest:这些文件的代码将是:
path_windows.go
path_unix.go
您现在可以在您的代码中访问
PATH_SEPARATOR
并使其依赖于平台。运行时检测
如果要在运行时确定操作系统,请使用
runtime.GOOS
变量:虽然它被编译到运行时并因此忽略了环境,但您仍然可以相对确定该值是正确的。这是因为每一个值得区分的平台,由于可执行格式不同,都需要重新构建,从而产生了新的
GOOS
值。