哪个网站做网络推好,建设医院网站的目的,网页素材网,网站收录引擎在使用go来开发跨平台应用的时候#xff0c;比如配置文件的路径#xff0c;我们希望设置一个默认值#xff0c;windows下的路径是类似 d:\myapp\app.conf 这样的#xff0c; unix系统中的路径是 /opt/myapp/app.conf 这样的#xff0c; 而我们在使用的时候需要使用的是同…在使用go来开发跨平台应用的时候比如配置文件的路径我们希望设置一个默认值windows下的路径是类似 d:\myapp\app.conf 这样的 unix系统中的路径是 /opt/myapp/app.conf 这样的 而我们在使用的时候需要使用的是同一个变量名来代表他们 那么就要把 //go:build 这个请出来了 他可以根据不同的平台来编译对应的go文件。
对于这类的信息我们一般只是模块内使用那最好是是使用 internal文件夹来保护一下如我们假设有如下2个文件来保存我们的默认配置信息
internal/vars/defaults_notwin.go internal/vars/defaults_windows.go
这2个文件内容如下
defaults_notwin.go
//go:build !windows
// 非windows系统编译package varsvar (DefaultConfigFile /opt/myapp/app.conf)defaults_windows.go
package varsimport (os
)var (DefaultConfigFile os.Getenv(SYSTEMDRIVE) \myapp\app.conf
)可见他们的包名一样2个文件里面定义的变量名也是一样的 而我们的编译器却不会报错这个是为什么呢
细心的你应该看出在第一个文件defaults_notwin.go 的开头 有1行注释 //go:build !windows
注意在//后面没有空格这个是go里面的特殊用法而注释通常在//后面是有一个空格的
这个地方的 //go:build !windows 表示告诉编译器 当前文件在非windows系统时编译而另外一个文件 defaults_windows.go 就只会在windows系统时才会编译 则就保证了同一个包中使用了2个同名变量而不会报错。
我们在代码中要使用这个变量的时候就可以直接使用 confFileDefault : vars.DefaultConfigFile 而不用考虑当前平台是windows还是unix了。