Ответ 1
Обнаружение во время компиляции
Если вы делаете это, чтобы иметь разные реализации в зависимости от ОС, более полезно
иметь отдельные файлы с реализацией этой функции и добавлять теги сборки к каждому
файлов. Это используется во многих местах стандартной библиотеки, например в пакете os
.
Эти так называемые "ограничения сборки" или "теги сборки" объясняются здесь.
Скажите, что у вас есть константа PATH_SEPARATOR
, и вы хотите, чтобы эта платформа зависела, вы
сделал бы два файла, один для окон и один для отдыха (unix):
/project/path_windows.go
/project/path_unix.go
Тогда код этих файлов:
path_windows.go
// +build windows
package project
const PATH_SEPARATOR = '\\'
path_unix.go
// +build !windows
package project
const PATH_SEPARATOR = '/'
Теперь вы можете получить доступ к PATH_SEPARATOR
в своем коде и привязать его к платформе.
Обнаружение во время выполнения
Если вы хотите определить операционную систему во время выполнения, используйте runtime.GOOS
переменная:
if runtime.GOOS == "windows" {
fmt.Println("Hello from Windows")
}
Хотя это скомпилировано во время выполнения и поэтому игнорирует среду,
тем не менее вы можете быть уверены, что значение правильное.
Причиной этого является то, что каждая платформа, которая стоит различать потребности
перестройка из-за разных исполняемых форматов и, следовательно, имеет новое значение GOOS
.