首页 > 其他分享 >gin框架——使用viper读取配置

gin框架——使用viper读取配置

时间:2022-10-27 16:12:22浏览次数:68  
标签:读取 err gorm datasource GetString gin port viper

什么是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 
		}
	}
 
}

标签:读取,err,gorm,datasource,GetString,gin,port,viper
From: https://www.cnblogs.com/zichliang/p/16832600.html

相关文章

  • Nginx 命令行控制
    在Linux中,Nginx默认被安装在目录/usr/local/nginx中,其中二进制文件路径为/usr/local/nginx/sbin/nignx,配置文件路径为/usr/local/nginx/conf/nginx.conf。注:在con......
  • 基于QEMU的Unicorn Engine模拟器
     https://github.com/unicorn-engine/unicorn 什么是Unicorn引擎Unicorn是一个轻量级,多平台,多架构的CPU模拟器框架.我们可以更好地关注CPU操作,忽略机器设备的......
  • nginx启动命令
    启动加载配置文件[root@172sbin]#/usr/local/nginx/sbin/nginx-c/usr/local/nginx/conf/nginx.conf 检查配置信息是否正确[root@172sbin]#/usr/local/nginx/sbin......
  • Huggingface数据集下载无法连接解决方式
     问题背景:Huggingface网站提供了许多数据集,数据集格式比较标准,使用非常方便。但是在国内用服务器datasets.load_dataset()下载经常会遇到cannotconnect的问题,即使在联......
  • 【JSON】Python读取JSON文件报错json.decoder.JSONDecodeError的问题
    报错json.decoder.JSONDecodeError:Expectingpropertynameenclosedindoublequotes:line*column*(char*)解决百度到了多种情况:编码使用UTF-8键值用双引......
  • 创建一个nginx资源清单
    注意selector一定要书写正确,否则通过集群IP:端口或者是节点ip:外部访问端口都无法访问apiVersion:v1kind:Podmetadata:name:test-podnamespace:testlabel......
  • nginxssl证书配置
    nginx可以用openssl自建的CA证书反向代理互联网的https网站吗?当然不行呀,证书是由权威机构颁发的文件,自己生成的证书并不具备可信度,所以必须要向CA申请证书。这样才能在互联......
  • nginxlocation优先级
    nginx反向代理一个server下配置多个location域名问题当你设置两个location/时,当然只会匹配第一个了。你的意思是不是要配置两个域名?server{listen80;server_namewww.1.com;......
  • nginx源码编译安装
    window版本的nginx能重新编译吗?如何添加新的模块呢找到安装nginx的源码根目录,如果没有的话下载新的源码xvzfnginx-1.3.2.tar.gz查看ngixn版本极其编译参数/usr/local/ngin......
  • nginxhttp转到https没有带端口
    nginxhttps自动跳转成http怎么解决您关闭301跳转,HTTPS自然就无法访问,如果您要HTTPS跳转HTTP,这个是不正确的行为,如果设置会导致搜索引擎蜘蛛混乱,无法确定实际网站,目前搜索......