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