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
// +build
debe 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")
}