Поиск…


Вступление

Платформа условного компиляции в Go имеет две формы: одна с суффиксами файлов, а другая - с тегами сборки.

Синтаксис

  • После « // +build » может следовать одна платформа или список
  • Платформа может быть возвращена предыдущим ! знак
  • Список пространственно разделенных платформ ORed вместе

замечания

Предостережения для тегов сборки:

  • Ограничение // +build должно быть размещено в верхней части файла, даже до предложения пакета.
  • За ним должна следовать одна пустая строка, чтобы отделить комментарии к пакетам.
Список допустимых платформ для обоих тегов сборки и суффиксов файлов
андроид
Дарвин
стрекоза
FreeBSD
линукс
NetBSD
OpenBSD
plan9
Солярис
окна

См. Список $GOOS в https://golang.org/doc/install/source#environment для самого современного списка платформы.

Создание тегов

// +build linux

package lib

var OnlyAccessibleInLinux int // Will only be compiled in Linux

Отклоните платформу, разместив ее ! перед этим:

// +build !windows

package lib

var NotWindows int // Will be compiled in all platforms but not Windows

Список платформ можно указать, разделив их пробелами

// +build linux darwin plan9

package lib

var SomeUnix int // Will be compiled in linux, darwin and plan9 but not on others

Суффикс файла

Если вы lib_linux.go свой файл lib_linux.go , весь контент в этом файле будет только скомпилирован в среде linux:

package lib

var OnlyCompiledInLinux string

Определение отдельных видов поведения на разных платформах

Различные платформы могут иметь отдельные реализации одного и того же метода. В этом примере также показано, как использовать теги сборки и суффиксы файлов вместе.

Файл main.go :

package main

import "fmt"

func main() {
    fmt.Println("Hello World from Conditional Compilation Doc!")
    printDetails()
}

details.go :

// +build !windows

package main

import "fmt"

func printDetails() {
    fmt.Println("Some specific details that cannot be found on Windows")
}

details_windows.go :

package main

import "fmt"

func printDetails() {
    fmt.Println("Windows specific details")
}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow