Go
Programowanie na wiele platform z kompilacją warunkową
Szukaj…
Wprowadzenie
Kompilacja warunkowa oparta na platformie jest dostępna w Go w dwóch postaciach, jedna z przyrostkami plików, a druga ze znacznikami kompilacji.
Składnia
- Po „
// +build
” może podążać pojedyncza platforma lub lista - Platformę można cofnąć, poprzedzając ją
!
znak - Lista oddzielonych spacjami platform jest ORedowana razem
Uwagi
Ostrzeżenia dotyczące tagów kompilacji:
- Ograniczenie
// +build
musi być umieszczone na górze pliku, nawet przed klauzulą pakietu. - Musi nastąpić jeden pusty wiersz, aby oddzielić się od komentarzy do pakietu.
Lista prawidłowych platform zarówno dla znaczników kompilacji, jak i przyrostków plików |
---|
android |
Darwin |
ważka |
freebsd |
linux |
netbsd |
openbsd |
plan9 |
solaris |
Windows |
Zobacz listę $GOOS
na https://golang.org/doc/install/source#environment, aby uzyskać najbardziej aktualną listę platform.
Twórz tagi
// +build linux
package lib
var OnlyAccessibleInLinux int // Will only be compiled in Linux
Neguj platformę, umieszczając !
przed tym:
// +build !windows
package lib
var NotWindows int // Will be compiled in all platforms but not Windows
Listę platform można określić, oddzielając je spacjami
// +build linux darwin plan9
package lib
var SomeUnix int // Will be compiled in linux, darwin and plan9 but not on others
Sufiks pliku
Jeśli lib_linux.go
swój plik lib_linux.go
, cała zawartość tego pliku zostanie skompilowana tylko w środowiskach Linux:
package lib
var OnlyCompiledInLinux string
Definiowanie osobnych zachowań na różnych platformach
Różne platformy mogą mieć osobne implementacje tej samej metody. Ten przykład ilustruje również, w jaki sposób można używać tagów kompilacji i sufiksów plików.
Plik 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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow