2016-08-15 13 views
5

Does golang obsługujeC-styl warunkowa kompilacja w golang

#define DEBUG 

#ifdef DEBUG 
    fmt.Println("Debug message..."); 
#endif 

Więc mogę zbudować wersję debugowania przy zerowym obciążeniu wykonywania?

+1

Ściśle sp oken nie. Nie ma preprocesora, a zatem nie ma magii preprocesora. – lofcek

+0

podobnie jak w Javie nie ma żadnego wbudowanego preprocesora w GoLangu, ale także jak w Javie można używać podobnych narzędzi na stronie trzeciej. na przykład używam [Java Comment Preprocessor + mvn-golang] (https://github.com/raydac/mvn-golang/tree/master/mvn-golang-examples/mvn-golang-examples-preprocessing) i robi to dobrze wyniki –

Odpowiedz

12

Go nie ma preprocesora ani systemu makr. Możesz przekazać znaczniki, aby zbudować flagę -tags i użyć ograniczeń kompilacji. Aby to zrobić, potrzebujesz dwóch wersji tego samego źródła i tylko jeden będzie budowany w zależności od tego, czy tag jest obecny, czy nie.

Spójrz ograniczeń budować w https://golang.org/pkg/go/build/

main_debug.go

// +build debug 

package main 

import (
    "fmt" 
) 

func main() { 
    fmt.Println("Debug build") 
} 

main_release.go

// +build !debug 

package main 

import (
    "fmt" 
) 

func main() { 
    fmt.Println("Release build") 
} 

Tutaj go build by skompilować z main_release.go i go build -tags debug by skompilować z main_debug.go

+0

Wygląda na to, że jest to najlepsza praktyka na razie ... –