Go
Construir restricciones
Buscar..
Sintaxis
- // + construir etiquetas
Observaciones
Las etiquetas de compilación se utilizan para construir condicionalmente ciertos archivos en su código. Las etiquetas de compilación pueden ignorar los archivos que no desea que se compilen a menos que se incluyan explícitamente, o algunas etiquetas de compilación predefinidas se pueden usar para que un archivo solo se cree en una arquitectura o sistema operativo en particular.
Las etiquetas de compilación pueden aparecer en cualquier tipo de archivo de origen (no solo en Ir), pero deben aparecer cerca de la parte superior del archivo, precedidas solo por líneas en blanco y otros comentarios de línea. Estas reglas significan que en los archivos Go una restricción de compilación debe aparecer antes de la cláusula del paquete.
Una serie de etiquetas de compilación debe ir seguida de una línea en blanco.
Pruebas de integración separadas
Las restricciones de compilación se usan comúnmente para separar las pruebas de unidad normales de las pruebas de integración que requieren recursos externos, como una base de datos o acceso a la red. Para hacer esto, agregue una restricción de compilación personalizada en la parte superior del archivo de prueba:
// +build integration
package main
import (
"testing"
)
func TestThatRequiresNetworkAccess(t *testing.T) {
t.Fatal("It failed!")
}
El archivo de prueba no se compilará en el ejecutable de compilación a menos que se use la siguiente invocación de la go test
:
go test -tags "integration"
Resultados:
$ go test
? bitbucket.org/yourname/yourproject [no test files]
$ go test -tags "integration"
--- FAIL: TestThatRequiresNetworkAccess (0.00s)
main_test.go:10: It failed!
FAIL
exit status 1
FAIL bitbucket.org/yourname/yourproject 0.003s
Optimizar implementaciones basadas en arquitectura.
Podemos optimizar una función xor simple solo para arquitecturas que admiten lecturas / escrituras no alineadas al crear dos archivos que definen la función y el prefijo con una restricción de compilación (para un ejemplo real del código xor que está fuera de alcance aquí, vea crypto/cipher/xor.go
en la biblioteca estándar):
// +build 386 amd64 s390x
package cipher
func xorBytes(dst, a, b []byte) int { /* This function uses unaligned reads / writes to optimize the operation */ }
y para otras arquitecturas:
// +build !386,!amd64,!s390x
package cipher
func xorBytes(dst, a, b []byte) int { /* This version of the function just loops and xors */ }