Go allows OS-specific code to be selected two different ways, either using 
the runtime.GOOS constant or with file-level build tags like "//+build 
linux" or (equivalently) OS-specific source file suffixes like _linux.

What's the recommended way to decide when to use which?

As far as I can tell:
- There is no runtime advantage to either. runtime.GOOS is a constant, so 
the compiler eliminates any unreachable branches. File-level build tags 
mean that irrelevant files don't even reach the compiler. Either way, the 
irrelevant code is not included in the final binary and incurs no runtime 
cost.
- When using build tags, the fact that irrelevant code doesn't reach the 
compiler means that errors can creep in. For example, compile errors in 
foo_linux.go will be unnoticed if you only ever compile on Windows. In 
contrast, using runtime.GOOS will mean that compile errors are found 
whatever OS you compile on.
- Only build flags and OS-specific source file suffixes give you control 
over imports.

Therefore, it would seem that the recommendation of when to use 
runtime.GOOS vs. build flags/file suffixes is:
- Use runtime.GOOS unless you need OS-specific imports or your OS-specific 
code is so different that it really deserves to be in a separate source 
file.

Is this recommendation reasonable? What could be improved?

Cheers,
Tom

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/64d5d1c5-ed1f-41f9-9190-f007e327f146%40googlegroups.com.

Reply via email to