2012-05-18 23 views
40

Tengo un problema con la compilación condicional en Go 1.compilación condicional de Golang

Aquí está mi código de prueba. ¿Hay algo que malinterprete sobre la restricción "// + build" y la marca "-tags"?

main1.go

// +build main1 
package main 

import (
    "fmt" 
) 

func main() { 
    fmt.Println("This is main 1") 
} 

main2.go

// +build main2 
package main 

import (
    "fmt" 
) 

func main() { 
    fmt.Println("This is main 2") 
} 

cuando se ejecuta "ir a construir", yo todavía tengo error de compilación

$ go build -tags 'main1' 
# test 
./main2.go:8: main redeclared in this block 
     previous declaration at ./main1.go:8 

Respuesta

59

Debe seguir // +build XXX con un espacio en blanco línea.

En mi breve búsqueda, no pude encontrar dónde/si esto está documentado. Pero the source llama claramente a cabo

+3

Está documentado en http://golang.org/pkg/go/build/#hdr-Build_Constraints. Específicamente: "Para distinguir las restricciones de compilación de la documentación del paquete, una serie de restricciones de compilación debe ir seguida de una línea en blanco". – chowey

12

derecho, se debe dejar una línea en blanco, no exactamente después // +build XXX pero antes package main porque todas las líneas de comentario antes de la línea que declaran el paquete se considera que la descripción del paquete y analizado por godoc .

4

http://golang.org/pkg/go/build/ Restricciones Construir “Para distinguir construir las limitaciones de documentación del paquete, una serie de restricciones de construcción deben ser seguidas por una línea en blanco.”

9

Package build

Construir Restricciones

A restricción de compilación es un comentario de línea que comienza con la directiva +build que enumera las condiciones bajo las cuales un archivo debe ser incluido en el paquete. Las restricciones pueden aparecer en cualquier tipo de archivo fuente (no solo Ir), pero deben aparecer cerca de la parte superior del archivo, precedido solo por líneas en blanco y otros comentarios de línea.

Para distinguir las restricciones de compilación de la documentación del paquete, una serie de restricciones de compilación debe ir seguida de una línea en blanco.

Agregue una línea en blanco después de la restricción de compilación. Por ejemplo,

// +build main1 

package main 

import (
    "fmt" 
) 

func main() { 
    fmt.Println("This is main 1") 
} 
Cuestiones relacionadas