婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > go項目中環境變量的配置

go項目中環境變量的配置

熱門標簽:電腦外呼系統輻射大嗎 開通400電話申請流程 百度地圖標注位置網站 武漢百應人工智能電銷機器人 上海企業外呼系統排名 揚州電銷外呼系統軟件 400手機電話免費辦理 如何利用高德地圖標注家 智能語音電銷的機器人

一、為什么要配置文件

1、容易編輯,配置比較集中,方便修改,在大業務量的系統里面,通過配置會方便后人理解整個系統的架構
2、做到業務代碼和環境解耦,環境配置變量不侵入到代碼層面
3、不同的環境切換比較方便

二、在go中使用配置文件

1、viper網站地址

2、本地安裝

go get github.com/spf13/viper

3、簡單的讀取配置文件

package main

import (
 "fmt"
 "github.com/spf13/viper"
)

func main() {
 v := viper.New()
 v.SetConfigFile("config.yaml")
 if err := v.ReadInConfig(); err != nil {
  fmt.Println("讀取配置文件失敗", err)
 }
 fmt.Println(v.Get("name"))
}

4、在文件的同級下創建一個config.yaml的文件

name: "test"

5、使用go run 文件名運行文件,這樣直接運行會報錯找不到文件

6、建議配置后可以使用右鍵運行項目

package main

import (
 "fmt"
 "github.com/spf13/viper"
 "os"
 "path"
)

func main() {
 // 獲取項目目錄
 workDir, _ := os.Getwd()
 v := viper.New()
  // 直接拼接文件目錄讀取
 v.SetConfigFile(path.Join(workDir, "test/config.yaml"))
 if err := v.ReadInConfig(); err != nil {
  fmt.Println("讀取配置文件失敗", err)
 }
 fmt.Println(v.Get("name"))
}

三、使用結構體的方式讀取

1、簡單的使用

package main

import (
 "fmt"
 "github.com/spf13/viper"
 "os"
 "path"
)

type ServerConfig struct {
 Name string `mapstructure:"name"`
}

func main() {
 // 獲取項目目錄
 workDir, _ := os.Getwd()
 v := viper.New()
 v.SetConfigFile(path.Join(workDir, "test/config.yaml"))
 if err := v.ReadInConfig(); err != nil {
  fmt.Println("讀取配置文件失敗", err)
 }
 serverConfig := ServerConfig{}
 if err := v.Unmarshal(serverConfig); err != nil {
  fmt.Println("解析結構體失敗", err)
 }
 fmt.Println(serverConfig.Name)
}

2、結構體的嵌套,很常見的是mysql數據庫的配置

// 定義mysql的
type MySQLConfig struct {
 Host string `mapstructure:"host"`
 Port int `mapstructure:"port"`
 Username string `mapstructure:"username"`
 Password string `mapstructure:"password"`
}
type ServerConfig struct {
 Name string `mapstructure:"name"`
 // 嵌套使用,注意這個地方要和yaml中一樣
 MySqlConfig MySQLConfig `mapstructure:"mysql"`
}

// 直接使用
fmt.Println(serverConfig.MySqlConfig)

四、區分開發環境和生產環境

1、在mac電腦上配置環境變量,在.bash_profile中導出一個環境變量,注意要關閉goland重新打開

# vim .bash_profile
export IS_DEV= true
source .bash_profile 

2、定義方法直接獲取環境變量

func GetEnvInfo(env string) bool {
 viper.AutomaticEnv()
 return viper.GetBool(env)
}
func main() {
 fmt.Println(GetEnvInfo("IS_DEV"))
}

3、在目錄下創建一個application.dev.yml和application.prod.yml的文件,分別存放不同環境下的配置

4、使用環境變量來讀取配置完整代碼

func GetEnvInfo1(env string) bool {
 viper.AutomaticEnv()
 return viper.GetBool(env)
}

// 定義mysql的
type MySQLConfig struct {
 Host string `mapstructure:"host"`
 Port int `mapstructure:"port"`
 Username string `mapstructure:"username"`
 Password string `mapstructure:"password"`
}
type ServerConfig struct {
 Name string `mapstructure:"name"`
 // 嵌套使用,注意這個地方要和yaml中一樣
 MySqlConfig MySQLConfig `mapstructure:"mysql"`
}

func main() {
 // 獲取項目目錄
 workDir, _ := os.Getwd()
 isDev := GetEnvInfo1("IS_DEV")
 configFileName := path.Join(workDir, "11.config/application.prod.yml")
 if isDev {
  configFileName = path.Join(workDir, "11.config/application.dev.yml")
 }
 v := viper.New()
 v.SetConfigFile(configFileName)
 if err := v.ReadInConfig(); err != nil {
  fmt.Println("讀取配置文件失敗", err)
 }
 serverConfig := ServerConfig{}
 if err := v.Unmarshal(serverConfig); err != nil {
  fmt.Println("解析結構體失敗", err)
 }
 fmt.Println(serverConfig.MySqlConfig)
}

五、在gin中集成配置文件

1、在和main.go同級的目錄下創建兩個xx.yml的文件

2、目錄下創建一個config、global、initialize的文件夾

3、在config/config.go的文件中書寫使用結構體讀取配置的

package config

// 定義mysql的
type MySQLConfig struct {
 Host string `mapstructure:"host"`
 Port int `mapstructure:"port"`
 Username string `mapstructure:"username"`
 Password string `mapstructure:"password"`
}
type ServerConfig struct {
 Name string `mapstructure:"name"`
 // 嵌套使用,注意這個地方要和yaml中一樣
 MySqlConfig MySQLConfig `mapstructure:"mysql"`
}

4、在global/global.go文件中定義全局變量(可能在全項目中某一個文件中需要獲取配置)

var (
 ServerConfig *config.ServerConfig = config.ServerConfig{}
)

5、在initialize/config目錄初始化配置

func GetEnvInfo(env string) bool {
 viper.AutomaticEnv()
 return viper.GetBool(env)
}

func InitConfig() {
 workDir, _ := os.Getwd()
 isDev := GetEnvInfo("IS_DEV")
 configFileName := path.Join(workDir, "11.config/application.prod.yml")
 if isDev {
  configFileName = path.Join(workDir, "11.config/application.dev.yml")
 }
 v := viper.New()
 //文件的路徑如何設置
 v.SetConfigFile(configFileName)
 if err := v.ReadInConfig(); err != nil {
  panic(err)
 }
 err := v.Unmarshal(global.ServerConfig)
 if err != nil {
  fmt.Println("讀取配置失敗")
 }
 fmt.Println(global.ServerConfig)
}

6、在mian.go中初始化配置文件并且打印出信息

func main() {
 // 初始化配置
 initialize.InitConfig()
 fmt.Println(global.ServerConfig.MySqlConfig)
}

到此這篇關于go項目中環境變量的配置的文章就介紹到這了,更多相關go 環境變量配置內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

標簽:新余 延邊 宜賓 江西 武漢 嘉峪關 張掖 黑龍江

巨人網絡通訊聲明:本文標題《go項目中環境變量的配置》,本文關鍵詞  項,目中,環境,變量,的,配置,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《go項目中環境變量的配置》相關的同類信息!
  • 本頁收集關于go項目中環境變量的配置的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲一区二区在线免费看| 91色在线porny| 国产精品一区在线观看你懂的| 国产91精品精华液一区二区三区| 91精品国产综合久久香蕉麻豆| 国产日产亚洲精品系列| 免费观看91视频大全| 欧美一卡2卡三卡4卡5免费| 一区二区高清视频在线观看| 国产真实精品久久二三区| 91精品国产综合久久精品| 日韩高清在线观看| 日韩视频一区二区三区在线播放| 午夜视频一区二区| 在线播放91灌醉迷j高跟美女| 美女视频黄频大全不卡视频在线播放| 成人在线视频一区二区| 在线免费不卡电影| 亚洲男人的天堂在线观看| 在线免费一区三区| 日本亚洲电影天堂| 精品国产三级电影在线观看| 国产高清不卡二三区| 久久精品人人爽人人爽| 蜜臀a∨国产成人精品| 欧美性videosxxxxx| 中文字幕亚洲区| 91亚洲精品久久久蜜桃| 亚洲美女视频在线观看| 亚洲一级二级在线| 国产麻豆视频一区二区| 国产精品色一区二区三区| 亚洲另类春色校园小说| 欧洲精品视频在线观看| 久久精品国产99| 亚洲天堂a在线| 精品久久久网站| 91啪亚洲精品| 精品亚洲成av人在线观看| 午夜精彩视频在线观看不卡| 中文字幕中文乱码欧美一区二区| 欧美成人性福生活免费看| 欧美亚洲综合久久| 91在线云播放| 午夜精品久久久久久久99樱桃 | 国产91精品一区二区麻豆亚洲| 性久久久久久久| 欧美激情一区在线| 精品国产麻豆免费人成网站| 欧美性一级生活| 精品久久久久久最新网址| 在线综合视频播放| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 国产高清在线观看免费不卡| 天堂资源在线中文精品| 日本aⅴ亚洲精品中文乱码| 亚洲123区在线观看| 青青草原综合久久大伊人精品 | 中文字幕一区av| 国产精品超碰97尤物18| 中文字幕中文字幕一区二区| 亚洲国产精品精华液2区45| 中文字幕一区二区三| 免播放器亚洲一区| 成人理论电影网| 久久久午夜电影| 亚洲午夜电影网| 色哦色哦哦色天天综合| 久久影音资源网| 日韩成人av影视| 欧美性受极品xxxx喷水| 亚洲视频一区在线| 国产精品亚洲专一区二区三区| 欧美久久免费观看| 一色桃子久久精品亚洲| 国内精品在线播放| 制服.丝袜.亚洲.中文.综合| 亚洲精品中文字幕在线观看| 国产精品一卡二卡在线观看| 欧美一区中文字幕| 日韩电影网1区2区| www.亚洲免费av| 国产欧美久久久精品影院| 喷白浆一区二区| 欧美最猛性xxxxx直播| 婷婷久久综合九色国产成人| 欧美不卡在线视频| 成人av在线一区二区三区| 亚洲少妇中出一区| 欧美精选一区二区| 国产一区二区网址| 久久精品人人做| 在线观看免费亚洲| 老司机免费视频一区二区三区| 久久免费美女视频| 欧美午夜电影网| 国产91丝袜在线播放| 一区二区三区视频在线看| 91精选在线观看| 色狠狠综合天天综合综合| 久久97超碰色| 日韩精品一卡二卡三卡四卡无卡| 国产欧美在线观看一区| 在线成人高清不卡| 欧美性生活影院| 在线视频欧美区| 91视频.com| 91国产福利在线| 色一区在线观看| 不卡一卡二卡三乱码免费网站| 麻豆精品新av中文字幕| 日韩国产欧美在线播放| 亚洲丶国产丶欧美一区二区三区| 精品国产一区二区三区久久影院| 欧美性三三影院| 在线观看日韩高清av| 在线看国产一区| 国产精品1区2区| 成人高清伦理免费影院在线观看| 国产精品18久久久久久久久 | 精品国产一区二区三区久久影院 | 日韩精品专区在线影院重磅| 一本色道久久综合亚洲91| 国产成人精品影视| av在线播放成人| 91美女精品福利| 欧美日韩在线播| 欧美绝品在线观看成人午夜影视| 51精品视频一区二区三区| 色88888久久久久久影院按摩| 色婷婷激情综合| 日韩三级电影网址| 国产拍欧美日韩视频二区| 亚洲欧美日韩国产手机在线| 亚洲第一精品在线| 黄网站免费久久| 色婷婷av一区二区三区大白胸| 欧美日韩国产另类一区| 日韩免费视频一区| 亚洲精品亚洲人成人网| 国产在线视视频有精品| 丰满亚洲少妇av| 日韩一级精品视频在线观看| 久久理论电影网| 天天射综合影视| 欧美欧美欧美欧美首页| 欧美激情综合五月色丁香| 日韩在线播放一区二区| 在线观看成人小视频| 亚洲资源中文字幕| 欧美三级在线播放| 亚洲国产精品自拍| 日本精品视频一区二区| 亚洲国产精品久久人人爱蜜臀| 风间由美一区二区av101 | 中文字幕亚洲不卡| 91香蕉视频污在线| 一区二区三区四区亚洲| 欧美色涩在线第一页| 轻轻草成人在线| 久久蜜桃香蕉精品一区二区三区| 免费观看成人鲁鲁鲁鲁鲁视频| 欧美猛男超大videosgay| 一区二区三区91| 在线91免费看| 国产精品88av| 亚洲自拍偷拍av| 久久精品亚洲乱码伦伦中文 | 精品99久久久久久| 国产在线一区观看| 国产精品传媒在线| av激情综合网| 亚洲综合色自拍一区| 在线视频中文字幕一区二区| 亚洲bt欧美bt精品| 精品精品国产高清一毛片一天堂| 国产精品综合久久| 亚洲一区二区三区四区五区黄| 欧美高清视频一二三区 | 国产精品青草综合久久久久99| 99久久国产综合精品女不卡| 日韩影院在线观看| 亚洲激情男女视频| 日韩精品一区二区三区swag| 91亚洲精品一区二区乱码| 日韩电影在线观看电影| 亚洲va国产天堂va久久en| 亚洲色图都市小说| 久久久综合视频| 精品国内片67194| 欧美另类videos死尸| 欧美午夜免费电影| jlzzjlzz国产精品久久| 免费成人你懂的| 日韩综合在线视频| 日本欧美肥老太交大片| 日本午夜一区二区| 久久精品久久久精品美女| 日韩精品电影一区亚洲| 亚洲图片一区二区|