Go
Desarrollando para múltiples plataformas con compilación condicional
Buscar..
Introducción
La compilación condicional basada en la plataforma viene en dos formas en Go, una con sufijos de archivo y la otra con etiquetas de compilación.
Sintaxis
- Después de "
// +build", puede seguir una sola plataforma o una lista - Se puede revertir la plataforma precediéndola por
!firmar - Lista de plataformas separadas en el espacio son oradas juntas
Observaciones
Advertencias para las etiquetas de construcción:
- La restricción de
// +builddebe colocar en la parte superior del archivo, incluso antes de la cláusula del paquete. - Debe ir seguido de una línea en blanco para separarse de los comentarios del paquete.
| Lista de plataformas válidas para etiquetas de compilación y sufijos de archivos |
|---|
| androide |
| Darwin |
| libélula |
| Freebsd |
| linux |
| netbsd |
| openbsd |
| plan9 |
| solaris |
| ventanas |
Consulte la lista de $GOOS en https://golang.org/doc/install/source#environment para obtener la lista de plataformas más actualizada.
Crear etiquetas
// +build linux
package lib
var OnlyAccessibleInLinux int // Will only be compiled in Linux
Niega una plataforma colocando ! antes de eso:
// +build !windows
package lib
var NotWindows int // Will be compiled in all platforms but not Windows
La lista de plataformas se puede especificar separándolas con espacios
// +build linux darwin plan9
package lib
var SomeUnix int // Will be compiled in linux, darwin and plan9 but not on others
Sufijo de archivo
Si nombra su archivo lib_linux.go , todo el contenido de ese archivo solo se compilará en entornos de Linux:
package lib
var OnlyCompiledInLinux string
Definiendo comportamientos separados en diferentes plataformas.
Diferentes plataformas pueden tener implementaciones separadas del mismo método. Este ejemplo también ilustra cómo las etiquetas de compilación y los sufijos de archivos se pueden usar juntos.
Archivo 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")
}