Мне действительно нравится легкость кросс-компиляции/платформы для многих задач, которые я могу получить с помощью GO. У меня есть вопрос относительно, я думаю, эквивалента конструкции типа #ifdef/#else для выполнения/компиляции функции, основанной на операционной системе.
Вот сценарий - скажем, у меня есть функция, которая вставляет информацию в структуры управления ОС для запуска процесса при следующем запуске системы пользователем. В Windows я бы обновил запись реестра "RUN/RUNONCE" для пользователя, в MAC была бы запись plist и т.д.
По сути, я хотел бы иметь возможность написать кого-то, аналогичного этому (или перегрузить определенные функции ОС):
func setStartupProcessLaunch () {
if [OS is Windows] {
updateRegistry(){}
} else if [OS is Darwin] {
updatePlist(){}
} else if [OS is Linux] {
doLinuxthing() {}
}
}
При статической компиляции любая из не вызванных подпрограмм будет помечена как ошибка компиляции. Поэтому в идеале я хотел бы заключить мои функции doSpecificOS() в блоки #ifdef WINDOWS, #ifdef MAC-типа - как правильно это сделать? Я надеюсь, что мне не нужно создавать несколько деревьев проектов одной и той же программы для каждой платформы ОС.