Does golang support
#define DEBUG
#ifdef DEBUG
fmt.Println("Debug message...");
#endif
So I can build a debug version with zero runtime overhead?
Does golang support
#define DEBUG
#ifdef DEBUG
fmt.Println("Debug message...");
#endif
So I can build a debug version with zero runtime overhead?
Go does not have a preprocessor or a macro system. What you could do is pass in tags to go build through the -tags
flag and use build constraints. To do this you would need two versions of the same source and only one would get build depending if the tag is present or not.
Look at build constraints in 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")
}
Here go build
would compile with main_release.go and go build -tags debug
would compile with main_debug.go
if you work on linux or Mac , you can try the "m4" command.This command is a macro processor which just fits this issue.
Writing a Makefile to run the m4 command before "go build" can do the same as using "go build -tags ..." and support more customization and of course, save your work.
for example:
write these within your go file(such as main.go):
define(DEBUG)
ifdef(`DEBUG',
fmt.Println("Debug message...");
)
write these within your Makefile file:
all:*.go
mv main.go main.go.bak
m4 main.go.bak > main.go
go build
mv main.go.bak main.go
then run "make".
Disadvantage:
© 2022 - 2024 — McMap. All rights reserved.