Aprende la compilación condicional de golang

Aprendí a generar ayer, y hoy aprendí otro punto de conocimiento, que también es un punto de conocimiento relacionado con las anotaciones. La compilación condicional de Golang también se llama restricciones de compilación.

Escenario de aplicación

La compilación condicional se puede reflejar en el código que se adapta a los sistemas operativos en diferentes plataformas. Las diferentes plataformas del sistema operativo tienen un soporte diferente para ciertas características, pero a menudo el código a nivel empresarial no prestará atención, por lo que se requiere cierta encapsulación del código subyacente. Por ejemplo, los directorios de inicio de Windows y Linux son diferentes, y nuestra empresa necesita leer el directorio de inicio, luego podemos usar la compilación condicional para lograr el efecto.

Dos formas de compilación condicional.

La compilación condicional se puede lograr de dos maneras:

  • Agregue un comentario al comienzo del archivo fuente;
  • Se implementa como un sufijo de nombre de archivo.

Al agregar comentarios

El formato del comentario es el siguiente:

// +build tags

Las etiquetas pueden ser un sistema operativo o una opción de compilador. Si hay algo que pueda completar, mire hacia atrás. Veamos un ejemplo para obtener una impresión general:

// +build windows

package main

import "fmt"

func echo()  {
	fmt.Print("windows")
}
// +build linux

package main

import "fmt"

func echo()  {
	fmt.Print("linux")
}
package main

func main()  {
	echo()
}

Escribí dos archivos, ambos tienen el método echo, y llamé al método echo en la función principal. Si se está ejecutando ahora, imprimirá "windows" en el entorno Windows y "linux" en el entorno Linux. Al ver esto, debería ser capaz de comprender aproximadamente qué es la compilación condicional y sus escenarios de aplicación.

Entonces, ¿qué hacemos cuando tenemos múltiples condiciones de compilación? Por ejemplo, en el entorno amd64 en Linux, ¿cómo deberían definirse las etiquetas? En los comentarios al principio del archivo fuente, puede haber múltiples definiciones de compilación, como:

// +build linux
// +build amd64

También se puede escribir así

// +build linux,amd64

La lógica separada por comas es la lógica de "y", y la lógica separada por un espacio es la lógica de "o", vea el siguiente ejemplo:

// +build linux,cgo darwin,cgo

Esto significa que en el entorno Linux o Apple, compile con cgo.
También es importante tener en cuenta que debe dejar una línea en blanco después del comentario. Si desea indicar que puede compilar mientras no esté en el entorno de Windows, debe escribir esto:

// +build !windows

Si las etiquetas detrás de + build no están definidas, se ignorarán durante la compilación, por ejemplo:

// +build abc

Ahora veamos qué etiquetas podemos llenar. De la documentación oficial, podemos ver las siguientes opciones:

- the target operating system, as spelled by runtime.GOOS
- the target architecture, as spelled by runtime.GOARCH
- the compiler being used, either "gc" or "gccgo"
- "cgo", if ctxt.CgoEnabled is true
- "go1.1", from Go version 1.1 onward
- "go1.2", from Go version 1.2 onward
- "go1.3", from Go version 1.3 onward
- "go1.4", from Go version 1.4 onward
- "go1.5", from Go version 1.5 onward
- "go1.6", from Go version 1.6 onward
- "go1.7", from Go version 1.7 onward
- "go1.8", from Go version 1.8 onward
- "go1.9", from Go version 1.9 onward
- "go1.10", from Go version 1.10 onward
- "go1.11", from Go version 1.11 onward
- "go1.12", from Go version 1.12 onward
- "go1.13", from Go version 1.13 onward
- "go1.14", from Go version 1.14 onward
- any additional words listed in ctxt.BuildTags

Nombra el sufijo en el archivo

El método de denominación de archivos es relativamente simple y puede compilarse condicionalmente con las siguientes formas de denominación:

*_GOOS //如:file_linux.go,表示只在Linux下编译
*_GOARCH //如:file_amd64.go,表示只在amd64下编译
*_GOOS_GOARCH //如:file_linux_amd64.go,表示只在Linux且amd64下编译

Bienvenido a prestar atención a mi número público: onepunchgo, déjame un mensaje.

imagen

20 artículos originales publicados · elogiados 0 · visitas 759

Supongo que te gusta

Origin blog.csdn.net/qq_31362439/article/details/105176713
Recomendado
Clasificación