什么是viper

Viper是Go应用程序的完整配置解决方案,包括12-Factor(也称为“十二要素”,是一套流行的应用程序开发原则。 其实我也不是很清楚)应用程序。它被设计为在应用程序中工作,可以处理基本上所有类型的配置需求和格式。它支持:

设置默认值

读取JSON, TOML, YAML, HCL, envfile和Java属性配置文件

实时监视和重新读取配置文件(可选)

读取环境变量

从远程配置系统(etcd或Consul)读取数据,并观察变化

从命令行标志读取

读取缓冲区

设置明确的值

具体请指教看官网

https://pkg.go.dev/github.com/spf13/viper#section-readme

安装

go get github.com/spf13/viper
go get gorm.io/gorm
go get gorm.io/driver/mysql

使用

在项目文件下 config/application.yaml文件,内容如下:

server:
port: 1016
datasource:
driverName: mysql
host: 127.0.0.1
port: 3306
database: ginInessential
username: root
password: admin*123
charset: utf8
loc: Asia/Shanghai

写完之后 在main函数中要初始化配置

func InitConfig() {
workDir, _ := os.Getwd()
viper.SetConfigName("application")
viper.SetConfigType("yml")
viper.AddConfigPath(workDir + "/config") err := viper.ReadInConfig()
if err != nil {
return
}
}

在初始化DB中使用

package common

import (
"GinDemo/model"
"fmt"
"github.com/spf13/viper"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"log"
"net/url"
) var DB *gorm.DB func InitDB() *gorm.DB {
//driverName := "mysql"
host := viper.GetString("datasource.host")
port := viper.GetString("datasource.port")
username := viper.GetString("datasource.username")
password := viper.GetString("datasource.password")
database := viper.GetString("datasource.database")
charset := viper.GetString("datasource.charset")
loc:= viper.GetString("datasource.loc")
args := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s&parseTime=true&loc=%s",
username,
password,
host,
port,
database,
charset,
url.QueryEscape(loc),
) var err error DB, err = gorm.Open(mysql.Open(args), &gorm.Config{})
if err != nil {
log.Fatal(err)
}
fmt.Printf("连接成功:%v\n", DB) return DB
}

main函数调用


func main() {
//初始化配置
InitConfig() //初始化数据库
common.InitDB() //使用gin
r := gin.Default()
r = CollectRoute(r) port := viper.GetString("server.port") if port != "" {
_ = r.Run(":" + port)
} else {
err := r.Run()
if err != nil {
return
}
} }

gin框架——使用viper读取配置的更多相关文章

  1. Gin 框架 - 安装和路由配置

    目录 概述 Gin 安装 路由配置 推荐阅读 概述 看下 Gin 框架的官方介绍: Gin 是一个用 Go (Golang) 编写的 web 框架. 它是一个类似于 martini 但拥有更好性能的 ...

  2. Gin框架 - 自定义错误处理

    目录 概述 错误处理 自定义错误处理 panic 和 recover 推荐阅读 概述 很多读者在后台向我要 Gin 框架实战系列的 Demo 源码,在这里再说明一下,源码我都更新到 GitHub 上, ...

  3. Gin 框架 - 使用 logrus 进行日志记录

    目录 概述 日志格式 Logrus 使用 推荐阅读 概述 上篇文章分享了 Gin 框架的路由配置,这篇文章分享日志记录. 查了很多资料,Go 的日志记录用的最多的还是 github.com/sirup ...

  4. [系列] Gin框架 - 数据绑定和验证

    目录 概述 推荐阅读 概述 上篇文章分享了 Gin 框架使用 Logrus 进行日志记录,这篇文章分享 Gin 框架的数据绑定与验证. 有读者咨询我一个问题,如何让框架的运行日志不输出控制台? 解决方 ...

  5. 使用Viper读取Nacos配置(开源)

    使用Viper读取Nacos配置(开源) 一.前言 目前Viper支持的Remote远程读取配置如 etcd, consul:目前还没有对Nacos进行支持,本文中将开源一个Nacos的Viper支持 ...

  6. [ASP.NET Core 3框架揭秘] 配置[1]:读取配置数据[上篇]

    提到"配置"二字,我想绝大部分.NET开发人员脑海中会立即浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化 ...

  7. [ASP.NET Core 3框架揭秘] 配置[2]:读取配置数据[下篇]

    [接上篇]提到“配置”二字,我想绝大部分.NET开发人员脑海中会立即浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化的配置定义 ...

  8. 使用zap接收gin框架默认的日志并配置日志归档

    目录 使用zap接收gin框架默认的日志并配置日志归档 gin默认的中间件 基于zap的中间件 在gin项目中使用zap 使用zap接收gin框架默认的日志并配置日志归档 本文介绍了在基于gin框架开 ...

  9. CAFFE(FAQ.2):Ubuntu 配置caffe 框架之数据库读取,错误解决:ImportError: No module named leveldb解决办法

    Z: 在安装了caffe框架后需要读取大量的数据进行学习训练.比如在MNIST识别训练中,一般直接读图片会比较耗时,我们一般将图片转存为数据库中.目前主流的数据库有以下两种选择: LevelDB Lm ...

随机推荐

  1. Spring 05: 用DI(依赖注入)优化Spring接管下的三层项目架构

    背景 用注解改造前面Spring博客集里(指 Spring 02)Spring接管下的三层项目架构 对前面Spring博客集里(指 Spring 04)@Controller + @Service + ...

  2. ABC209F. Deforestation——DP(、数学容斥)

    题面 有 n n n 棵树排成一排,每棵树高度为 h i ( i ∈ [ 1 , n ] ) h_i~(i\in[1,n]) hi​ (i∈[1,n]) ,你现在要按照一个排列 P P P 的顺序去砍 ...

  3. 【MIDO】乐理基础 与 python - 从零开始到编写柱式和弦与分解和弦

    本篇文章从律学开始,从十二平均律出发,介绍一些基础必要的乐理知识,然后编写python文件,输出和弦音频文件. 乐理知识部分: 一.律学简述(temperament)   1.概论   律学,又称&q ...

  4. 第七章 完成kubernetes集群部署并验证

    在其中一运算个节点上操作就行 创建nginx资源配置清单的yaml文件 [root@hdss7-21 ~]# vim /opt/kubernetes/conf/nginx-ds.yaml apiVer ...

  5. Hint 使用--leading

    Oracle hint -- leading 的作用是提示优化器某张表先访问,可以指定一张或多张表,当指定多张表时,表示按指定的顺序访问这几张表.而 Postgresql leading hint的功 ...

  6. Jmeter处理响应报文中文乱码

    Jmeter在访问发送请求的时候,响应内容如果有中文可能会显示乱码,原因应该是响应页面没有做编码处理,jmeter默认按照ISO-8859-1编码格式进行解析.而我们的响应报文却是utf-8的格式,所 ...

  7. Netty 学习(四):ChannelHandler 的事件传播和生命周期

    Netty 学习(四):ChannelHandler 的事件传播和生命周期 作者: Grey 原文地址: 博客园:Netty 学习(四):ChannelHandler 的事件传播和生命周期 CSDN: ...

  8. Kibana:在Kibana 中定制 time picker 及 指标可视化显示格式

    文章转载自:https://blog.csdn.net/UbuntuTouch/article/details/107066779

  9. Elasticsearch部署清单---前期准备工作

    1.了解ES集群拓扑结构 当我们启动Elasticsearch的实例,就会启动至少一个节点.相同集群名的多个节点的连接组成一个集群, 在默认情况下,集群中的每个节点都可以处理Http请求和集群节点的数 ...

  10. 关联Prometheus与Alertmanager

    在Prometheus的架构中被划分成两个独立的部分.Prometheus负责产生告警,而Alertmanager负责告警产生后的后续处理.因此Alertmanager部署完成后,需要在Prometh ...