Виявлення під час компіляції
Якщо ви робите це, щоб мати різні реалізації в залежності від ОС, корисніше мати окремі файли з реалізацією цієї функції та додавати теги збірки до кожного з файлів. Це використовується у багатьох місцях у стандартній бібліотеці, наприклад, у os
пакунку .
Ці так звані "обмеження побудови" або "теги побудови" пояснюються тут .
Скажімо, у вас є константа, PATH_SEPARATOR
і ви хочете, щоб ця платформа залежала, ви зробили б два файли, один для Windows та інший для (unix) відпочинку:
/project/path_windows.go
/project/path_unix.go
Тоді код цих файлів буде таким:
path_windows.go
package project
const PATH_SEPARATOR = '\\'
path_unix.go
package project
const PATH_SEPARATOR = '/'
Тепер ви можете отримати доступ PATH_SEPARATOR
до свого коду та забезпечити його залежність від платформи.
Виявлення під час виконання
Якщо ви хочете визначити операційну систему під час виконання, використовуйте runtime.GOOS
змінну:
if runtime.GOOS == "windows" {
fmt.Println("Hello from Windows")
}
Хоча це компілюється в середовищі виконання і, отже, ігнорує середовище, ви тим не менш можете бути відносно впевненими у правильності значення. Причиною цього є те, що кожна платформа, яку варто виділити, потребує відновлення через різні виконувані формати і, отже, має нове GOOS
значення.