Go
Разработка для нескольких платформ с условной компиляцией
Поиск…
Вступление
Платформа условного компиляции в 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