mdw*_*ott 66 operating-system go
这是我目前使用的,我认为完成工作,但必须有一个更好的方法:
func isWindows() bool {
return os.PathSeparator == '\\' && os.PathListSeparator == ';'
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,在我的情况下,我需要知道的是如何检测窗口,但我想知道检测任何平台/操作系统的方法.
玩:
nem*_*emo 112
如果您根据操作系统执行此操作以实现不同的实现,则使用该功能的实现来创建单独的文件并向每个文件添加构建标记会更有用.这在标准库中的许多地方使用,例如在os包中.
假设您有常量,PATH_SEPARATOR并且您希望该平台依赖,您将生成两个文件,一个用于Windows,另一个用于(unix)其余文件:
/project/path_windows.go
/project/path_unix.go
Run Code Online (Sandbox Code Playgroud)
这些文件的代码将是:
// +build windows
package project
const PATH_SEPARATOR = '\\'
Run Code Online (Sandbox Code Playgroud)
// +build !windows
package project
const PATH_SEPARATOR = '/'
Run Code Online (Sandbox Code Playgroud)
您现在可以访问PATH_SEPARATOR代码并使其与平台相关.
如果要在运行时确定操作系统,请使用以下runtime.GOOS
变量:
if runtime.GOOS == "windows" {
fmt.Println("Hello from Windows")
}
Run Code Online (Sandbox Code Playgroud)
虽然这被编译到运行时并因此忽略了环境,但您可以相对确定该值是正确的.这样做的原因是每个值得区分的平台都需要由于不同的可执行格式而重建,因此具有新的GOOS价值.
Tyl*_*eto 15
你看过运行时包吗?它有一个GOOS const:http://golang.org/pkg/runtime/#pkg-constants
Mat*_*att 11
现在是 2022 年,go 1.18+ 的正确答案是:
在运行时你想要:
if runtime.GOOS == "windows" {
// windows specific code here...
}
Run Code Online (Sandbox Code Playgroud)
如果需要确定文件系统路径分隔符
使用:os.PathSeparator
例子:
- c:\程序文件
- /usr/local/bin
PATH如果您需要环境变量使用的路径列表分隔符
使用:os.PathListSeparator
例子:
- /usr/local/bin:/usr/local:
- "C:\windows";"c:\windows\system32";