2016-08-15 6 views
5

합니까의 golang는C 스타일의 조건부 컴파일은

#define DEBUG 

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

그래서 나는 제로 런타임 오버 헤드 디버그 버전을 구축 할 수 있습니다 지원?

+1

엄밀히 말하면 sp 오켄 아니. 전 처리기가 없으므로 전 처리기 마법도 없습니다. – lofcek

+0

Java에서와 같이 GoLang에는 임베디드 전처리 기가 없지만 Java와 마찬가지로 3 번째 유사한 도구를 사용할 수 있습니다. 예를 들어 [Java Comment Preprocessor + mvn-golang] (https://github.com/raydac/mvn-golang/tree/master/mvn-golang-examples/mvn-golang-examples-preprocessing)을 사용하면 결과 –

답변

12

Go에는 전처리 기나 매크로 시스템이 없습니다. 당신이 할 수있는 일은 -tags 플래그를 통해 빌드하고 빌드 제약 조건을 사용하는 태그를 전달하는 것입니다. 이렇게하려면 동일한 소스의 두 가지 버전이 필요하며 태그가 있는지 여부에 따라 하나만 빌드됩니다. https://golang.org/pkg/go/build/

main_debug.go

// +build debug 

package main 

import (
    "fmt" 
) 

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

main_release.go에서 빌드 제약에서

봐 여기 go build main_release.go 컴파일 것이며 main_debug.go와 go build -tags debug 컴파일 할

// +build !debug 

package main 

import (
    "fmt" 
) 

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

+0

지금은 가장 좋은 방법입니다 ... –