1.安装
- 新建一个目录GinTest
执行 - go env -w GO111MODULE=on
- go env -w GOPROXY=https://goproxy.cn,direct
- go mod init test
- go get -u github.com/gin-gonic/gin
新建main.go
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
// 测试路由
r.GET("/ping", func(c *gin.Context) {
c.String(http.StatusOK, "pong")
})
// 启动服务器
r.Run(":8080")
}
2.配置文件
- config.yaml
app: # 应用基本配置
env: local # 环境名称
port: 8888 # 服务监听端口号
app_name: gin-app # 应用名称
app_url: http://localhost # 应用域名
- config/config.go
type Configuration struct {
App App `mapstructure:"app" json:"app" yaml:"app"`
}
- config/App.go
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"`
}
- global/app.go
go.mod的module名+包名
import (
"github.com/spf13/viper"
"lwx1/config"
)
type Application struct {
ConfigViper *viper.Viper
Config config.Configuration
}
var App = new(Application)
- bootstarp/config.go
import (
"fmt"
"github.com/fsnotify/fsnotify"
"github.com/spf13/viper"
"lwx1/global"
"os"
)
func InitializeConfig() *viper.Viper {
// 设置配置文件路径
config := "config.yaml"
// 生产环境可以通过设置环境变量来改变配置文件路径
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))
}
// 监听配置文件
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
import (
"github.com/gin-gonic/gin"
"lwx1/bootstrap"
"lwx1/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)
}
标签:err,app,gin,go,Gin,config,App
From: https://www.cnblogs.com/lwx11111/p/18635479