第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

Golang 包間共享配置

Golang 包間共享配置

Go
慕運(yùn)維8079593 2022-01-04 10:32:54
所以我剛剛開始學(xué)習(xí) Go 編程語言,并花了幾個(gè)小時(shí)來查看示例、參考資料等。正如你們大多數(shù)人會同意的那樣,沒有比潛入并創(chuàng)造一些東西更好的學(xué)習(xí)語言的方法了,這就是我目前正在嘗試做的事情。我正在構(gòu)建一個(gè) Restful Web 服務(wù)。我已經(jīng)設(shè)法讓基礎(chǔ)運(yùn)行以及插入數(shù)據(jù)庫、注冊路由等。但是在過去的兩天里,我一直在努力實(shí)現(xiàn)應(yīng)用程序配置/屬性??赡苤皇且?yàn)槲沂切率?,所以我?Go 項(xiàng)目架構(gòu)都是錯誤的,因此為什么我會遇到這樣的困難。沒有進(jìn)一步的到期這里是我的項(xiàng)目結(jié)構(gòu)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.gopackage modelsimport (   "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 args\n********************")    os.Exit(1)   }   config := models.NewConfig(args[0])   port := config.Server["PORT"]   router := routing.NewRouter()   fmt.Printf(  "-------------------------------------------------\n"+        "Listening and Serving on Port %s\n"+        "-------------------------------------------------",port)   log.Fatal(http.ListenAndServe(":"+port,router)) }所以正如你在我的 Main 中看到的,我從一個(gè)很好的文件中初始化了相關(guān)的配置。但問題是我將如何在數(shù)據(jù)庫包中使用來自 main 的相同配置對象,因?yàn)槲倚枰O(shè)置主機(jī)、端口等?我可以再次解析該文件,但我更愿意從一開始就共享該對象。請指出我正確的方向
查看完整描述

3 回答

?
嚕嚕噠

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個(gè)贊

我的建議是聲明一個(gè)全局變量config.go并使用該init()函數(shù)對其進(jìn)行初始化。這樣,您就知道該變量在任何包導(dǎo)入時(shí)都會被初始化。這是一些代碼:


package models


import (

   "io/ioutil"

   "encoding/json"

)



var (


    Configuration Config 

)



init() {


    args := os.Args[1:]

    if len(args) == 0{

       fmt.Println("********************\nMust specify a config file   in args\n********************")

       os.Exit(1)

   }


   Configuration = NewConfig(args[0]) // configuration initialized here

}


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

}

var()將在之前運(yùn)行init(),但init()將在導(dǎo)入它的包中的代碼之前運(yùn)行。因此,如果main.go導(dǎo)入models包,則init()inmodels將在內(nèi)部的任何代碼之前運(yùn)行main.go,因此該變量Configuration將在使用之前進(jìn)行初始化。


查看完整回答
反對 回復(fù) 2022-01-04
?
炎炎設(shè)計(jì)

TA貢獻(xiàn)1808條經(jīng)驗(yàn) 獲得超4個(gè)贊

現(xiàn)在你想要的只是提供一個(gè)可以在另一個(gè)包中使用的變量,解決方案很簡單,記住如果你聲明一個(gè)以大寫字母開頭的變量名:[AZ],這個(gè)變量可以在另一個(gè)包中可見并使用去。


所以,你只需要重命名config你main.go來Config,并提取其作為全局變量:


var Config *models.Config

func main(){

args := os.Args[1:]

if len(args) == 0{

   fmt.Println("********************\nMust specify a config file   in args\n********************")

os.Exit(1)

}


Config = models.NewConfig(args[0])

port := Config.Server["PORT"]


router := routing.NewRouter()

fmt.Printf(  "-------------------------------------------------\n"+

    "Listening and Serving on Port %s\n"+

    "-------------------------------------------------",port)


log.Fatal(http.ListenAndServe(":"+port,router))

}

當(dāng)你想在另一個(gè)包中使用它時(shí),只需調(diào)用<package name>.Config,包名是你的 main.go 所屬的包名,也許main在你的情況下。


查看完整回答
反對 回復(fù) 2022-01-04
?
肥皂起泡泡

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超6個(gè)贊

我已經(jīng)為此構(gòu)建了一個(gè)庫,一個(gè)工具箱工廠(單例)和一個(gè)不可知的配置解析器(yaml、json 和 toml),看看它,看例子:SpareBox


查看完整回答
反對 回復(fù) 2022-01-04
  • 3 回答
  • 0 關(guān)注
  • 275 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號