Golang在包之间共享配置
发布时间:2020-12-16 19:23:30 所属栏目:大数据 来源:网络整理
导读:所以我刚开始学习Go编程语言,并花了几个小时的时间来查看示例,参考资料等等.大多数人都同意,没有比学习语言更好的方法而不是潜入并做出某些东西,这正是我此刻想要做的事情.我正在构建一个Restful Web服务.我已经设法运行基础知识以及插入数据库,注册路由等.
所以我刚开始学习Go编程语言,并花了几个小时的时间来查看示例,参考资料等等.大多数人都同意,没有比学习语言更好的方法而不是潜入并做出某些东西,这正是我此刻想要做的事情.我正在构建一个Restful Web服务.我已经设法运行基础知识以及插入数据库,注册路由等.但是在过去的两天里,我一直在努力实现应用程序配置/属性.可能只是因为我是新手,我的Go项目架构都错了,因此我为什么遇到这样的困难.没有进一步的到期,这是我的项目结构
src server database dbaccess.go dbcomm.go handling handler.go handlercomm.go models config.go response.go user.go routing routes.go main.go 这是我的config.go package models import ( "io/ioutil" "encoding/json" ) type Config struct { Db map[string]string `json:"db"` Server map[string]string `json:"server"` } func NewConfig(fname string) *Config{ data,err := ioutil.ReadFile(fname) if err != nil{ panic(err) } config := Config{} err = json.Unmarshal(data,&config) if err != nil { panic(err) } return config 这是我的主要 func main(){ args := os.Args[1:] if len(args) == 0{ fmt.Println("********************nMust specify a config file in argsn********************") os.Exit(1) } config := models.NewConfig(args[0]) port := config.Server["PORT"] router := routing.NewRouter() fmt.Printf( "-------------------------------------------------n"+ "Listening and Serving on Port %sn"+ "-------------------------------------------------",port) log.Fatal(http.ListenAndServe(":"+port,router)) } 最后这是我的路线映射的地方 type Route struct { Name string Method string Pattern string HandlerFunc http.HandlerFunc } var routes = []Route{ Route{ "signup","POST","/signup",handling.PostSignUpUser,},Route{ "authenticate","/login",handling.PostLogin,} func NewRouter() *mux.Router{ router := mux.NewRouter().StrictSlash(true) for _,route := range routes{ router.Methods(route.Method) .Path(route.Pattern) .Name(route.Name) .Handler(route.HandlerFunc) } return router } 因此,您可以在我的Main中看到我从文件中初始化相关配置,这很好.但问题是如何在数据库包中使用main中的相同配置对象,因为我需要设置Host,Ports等?我可以再次解析文件,但我更愿意,如果我可以从一开始就共享那个对象.请指出我正确的方向
现在你想要的只是提供一个可以在另一个包中使用的变量,解决方案很简单,记住如果你声明一个以大写字母开头的变量名:[AZ],这个变量可以看到并在另一个包中使用走.
所以你只需要将main.go中的config重命名为Config并将其解压缩为全局变量: var Config *models.Config func main(){ args := os.Args[1:] if len(args) == 0{ fmt.Println("********************nMust specify a config file in argsn********************") os.Exit(1) } Config = models.NewConfig(args[0]) port := Config.Server["PORT"] router := routing.NewRouter() fmt.Printf( "-------------------------------------------------n"+ "Listening and Serving on Port %sn"+ "-------------------------------------------------",port) log.Fatal(http.ListenAndServe(":"+port,router)) } 当你想在另一个包中使用它时,只需调用< package name> .Config,包名是你的main.go所属的包名,也许在你的情况下是主要的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |