我有一个main.go文件,其中包含:
// running the router in port 9000
func main() {
router := routers.InitApp()
router.RunTLS(":9000" , "domain.crt" , "domain.key")
}
Run Code Online (Sandbox Code Playgroud)
在我的另一个gofile
package utils
var ConfigMap = GetAppConfig
func GetAppConfig() map[string]string{
....//
}
Run Code Online (Sandbox Code Playgroud)
ConfigMap是一个全局变量,每次我尝试访问utils.ConfigMapmap时GetAppConfig都会调用该函数.如何通过应用程序初始化然后在go项目中访问任何我想要的ConfigMap,我只能调用此函数一次.
icz*_*cza 14
这是包init()功能的用途.在"从外部"到达您的包裹之前,它们会被执行一次:
var ConfigMap map[string]string
func init() {
// Init ConfigMap here
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果要允许并发使用,则应保护此类导出的全局变量.将此保留给包的用户是不可行的.
为此,您应声明ConfigMap未导出:
var configMap[string]string
Run Code Online (Sandbox Code Playgroud)
并提供一个getter功能,可以通过以下方式正确保护它Mutex:
var confMux = &sync.Mutex{}
func Config(name string) string {
confMux.Lock()
defer confMux.Unlock()
return configMap[name]
}
Run Code Online (Sandbox Code Playgroud)