编译器时间代码块

Dmi*_*kov 0 go

是否有可能在编译时检测到OS名称和编译器指定的代码块,如:

version(windows)
{
}

version(linux)
{
}
Run Code Online (Sandbox Code Playgroud)

Eug*_*sky 6

Go会在构建时自动解决此问题.您只需将代码放在相应的文件中:

  • file_linux.go - linux版本的代码
  • file_windows.go - Windows版本的代码.

如果文件的名称在剥离扩展名和可能的_test后缀之后匹配以下任何模式:

*_GOOS

*_GOARCH

*_GOOS_GOARCH(例如:source_windows_amd64.go)

其中GOOS和GOARCH分别代表任何已知的操作系统和体系结构值,那么该文件被认为具有需要这些术语的隐式构建约束(除了文件中的任何显式约束).

命名文件dns_windows.go将导致仅在构建Windows程序包时包含该文件; 同样,math_386.s只有在为32位x86构建软件包时才会包含它.

https://golang.org/pkg/go/build/#hdr-Build_Constraints