最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

從零封裝Gin框架配置初始化全局變量

 更新時間:2024年01月31日 10:41:13   作者:生活處處有BUG  
這篇文章主要為大家介紹了從零封裝Gin框架配置初始化全局變量,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

引言

配置文件是每個項目必不可少的部分,用來保存應用基本數(shù)據(jù)、數(shù)據(jù)庫配置等信息,避免要修改一個配置項需要到處找的尷尬。這里我使用 viper 作為配置管理方案,它支持 JSON、TOML、YAML、HCL、envfile、Java properties 等多種格式的配置文件,并且能夠監(jiān)聽配置文件的修改,進行熱重載,詳細介紹大家可以去官方文檔查看

安裝

go get -u github.com/spf13/viper 

編寫配置文件

在項目根目錄下新建一個文件 config.yaml ,初期先將項目的基本配置放入,后續(xù)我們會添加更多配置信息

app: # 應用基本配置
  env: local # 環(huán)境名稱
  port: 8888 # 服務監(jiān)聽端口號
  app_name: gin-app # 應用名稱
  app_url: http://localhost # 應用域名

編寫配置結(jié)構(gòu)體

在項目根目錄下新建文件夾 config,用于存放所有配置對應的結(jié)構(gòu)體

新建 config.go 文件,定義 Configuration 結(jié)構(gòu)體,其 App 屬性對應 config.yaml 中的 app

package config

type Configuration struct {
    App App `mapstructure:"app" json:"app" yaml:"app"`
}

新建 app.go 文件,定義 App 結(jié)構(gòu)體,其所有屬性分別對應 config.yaml 中 app 下的所有配置

package config

type App struct {
    Env string `mapstructure:"env" json:"env" yaml:"env"`
    Port string `mapstructure:"port" json:"port" yaml:"port"`
    AppName string `mapstructure:"app_name" json:"app_name" yaml:"app_name"`
    AppUrl string `mapstructure:"app_url" json:"app_url" yaml:"app_url"`
}

注意:配置結(jié)構(gòu)體中 mapstructure 標簽需對應 config.ymal 中的配置名稱, viper 會根據(jù)標簽 value 值把 config.yaml 的數(shù)據(jù)賦予給結(jié)構(gòu)體

全局變量

新建 global/app.go 文件,定義 Application 結(jié)構(gòu)體,用來存放一些項目啟動時的變量,便于調(diào)用,目前先將 viper 結(jié)構(gòu)體和 Configuration 結(jié)構(gòu)體放入,后續(xù)會添加其他成員屬性

package global

import (
    "github.com/spf13/viper"
    "jassue-gin/config"
)

type Application struct {
    ConfigViper *viper.Viper
    Config config.Configuration
}

var App = new(Application)

使用 viper 載入配置

新建 bootstrap/config.go 文件,編寫代碼:

package bootstrap
import (
    "fmt"
    "github.com/fsnotify/fsnotify"
    "github.com/spf13/viper"
    "jassue-gin/global"
    "os"
)
func InitializeConfig() *viper.Viper {
    // 設置配置文件路徑
    config := "config.yaml"
    // 生產(chǎn)環(huán)境可以通過設置環(huán)境變量來改變配置文件路徑
    if configEnv := os.Getenv("VIPER_CONFIG"); configEnv != "" {
        config = configEnv
    }
    // 初始化 viper
    v := viper.New()
    v.SetConfigFile(config)
    v.SetConfigType("yaml")
    if err := v.ReadInConfig(); err != nil {
        panic(fmt.Errorf("read config failed: %s \n", err))
    }
    // 監(jiān)聽配置文件
    v.WatchConfig()
    v.OnConfigChange(func(in fsnotify.Event) {
        fmt.Println("config file changed:", in.Name)
        // 重載配置
        if err := v.Unmarshal(&global.App.Config); err != nil {
            fmt.Println(err)
        }
    })
    // 將配置賦值給全局變量
    if err := v.Unmarshal(&global.App.Config); err != nil {
       fmt.Println(err)
    }
    return v
}

初始化配置

修改 main.go 文件

package main
import (
    "github.com/gin-gonic/gin"
    "jassue-gin/bootstrap"
    "jassue-gin/global"
    "net/http"
)
func main() {
    // 初始化配置
    bootstrap.InitializeConfig()
    r := gin.Default()
    // 測試路由
    r.GET("/ping", func(c *gin.Context) {
        c.String(http.StatusOK, "pong")
    })
    // 啟動服務器
    r.Run(":" + global.App.Config.App.Port)
}

執(zhí)行 go run main.go ,啟動應用,服務器監(jiān)聽的端口是已經(jīng)是配置文件里的端口號了,http://127.0.0.1:8888/ping

以上就是從零封裝Gin框架配置初始化全局變量的詳細內(nèi)容,更多關于封裝Gin初始化全局變量的資料請關注腳本之家其它相關文章!

相關文章

  • golang中隨機數(shù)rand的使用

    golang中隨機數(shù)rand的使用

    本文主要介紹了golang中隨機數(shù)rand的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • GO語言協(xié)程創(chuàng)建使用并通過channel解決資源競爭

    GO語言協(xié)程創(chuàng)建使用并通過channel解決資源競爭

    這篇文章主要為大家介紹了GO語言協(xié)程創(chuàng)建使用并通過channel解決資源競爭,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • Golang科學計數(shù)法轉(zhuǎn)換string數(shù)字輸出的實現(xiàn)

    Golang科學計數(shù)法轉(zhuǎn)換string數(shù)字輸出的實現(xiàn)

    最近接手一個商城運單號模塊,接手后發(fā)現(xiàn)有部分運單號返回給前端是按照科學計數(shù)法的方式返回,本文就介紹一下Golang科學計數(shù)法轉(zhuǎn)換string數(shù)字輸出,感興趣的可以了解一下
    2021-07-07
  • 基于GORM實現(xiàn)CreateOrUpdate方法詳解

    基于GORM實現(xiàn)CreateOrUpdate方法詳解

    這篇文章主要為大家介紹了基于GORM實現(xiàn)CreateOrUpdate方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • Golang實現(xiàn)Md5校驗的示例代碼

    Golang實現(xiàn)Md5校驗的示例代碼

    本文主要介紹了Golang實現(xiàn)Md5校驗的示例代碼,要求接收方需要文件的md5值,和接收到的文件做比對,以免文件不完整,但引起bug,下面就一起來解決一下
    2024-08-08
  • Go語言rune與字符串轉(zhuǎn)換的密切關系解析

    Go語言rune與字符串轉(zhuǎn)換的密切關系解析

    這篇文章主要為大家介紹了Go語言rune與字符串轉(zhuǎn)換的密切關系示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • 深入理解golang chan的使用

    深入理解golang chan的使用

    本文主要介紹了golang chan的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • 關于Go語言中的IO操作詳解

    關于Go語言中的IO操作詳解

    在現(xiàn)代軟件開發(fā)中,高效的輸入輸出(I/O)操作是提高程序性能的關鍵之一,Go語言提供了豐富的I/O操作接口,使得文件讀寫、網(wǎng)絡通信等任務變得簡單而高效,本文介紹了關于Go語言中的IO操作,需要的朋友可以參考下
    2024-10-10
  • 基于Go語言實現(xiàn)插入排序算法及優(yōu)化

    基于Go語言實現(xiàn)插入排序算法及優(yōu)化

    插入排序是一種簡單的排序算法。這篇文章將利用Go語言實現(xiàn)冒泡排序算法,文中的示例代碼講解詳細,對學習Go語言有一定的幫助,需要的可以參考一下
    2022-12-12
  • golang zap日志庫的具體使用

    golang zap日志庫的具體使用

    本文主要介紹了golang zap日志庫的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-11-11

最新評論

民乐县| 黄浦区| 弋阳县| 昭苏县| 台江县| 彝良县| 弋阳县| 南和县| 镇安县| 岳阳县| 北京市| 安乡县| 顺平县| 徐汇区| 安溪县| 木兰县| 东明县| 沙坪坝区| 湖南省| 阜新市| 麻城市| 北川| 景谷| 吉林省| 浮山县| 龙游县| 安化县| 泗水县| 鸡泽县| 蒲城县| 渑池县| 常山县| 喀什市| 诏安县| 宁南县| 忻州市| 专栏| 邛崃市| 兰坪| 开原市| 枝江市|