Go使用 viper 读取配置文件

注:本文中与《Go操作MySQL》相关,操作数据库相关参考该片文章

1. 下载 viper 依赖

go get github.com/spf13/viper

1.读取 yaml 文件

1.1 创建 yaml 文件

db:
  driverName: mysql
  username: root
  password: root
  address: 127.0.0.1
  port: 3306
  agreement: tcp
  database: my_go

1.2 创建 viper 工具类

package config

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

const (
	YAML = "yaml"
	JSON = "json"
	INI  = "ini"
)

/*
filePath 文件所在目录
fileName 文件名称
fileType 文件类型
*/
func GetConfig(filePath, fileName, fileType string) *viper.Viper {
	// 配置文件信息
	config := viper.New()
	config.AddConfigPath(filePath)
	config.SetConfigName(fileName)
	config.SetConfigType(fileType)
	// 抛出读取异常
	if err := config.ReadInConfig(); err != nil {
		panic(err)
	}
	return config
}

1.3 改造数据源信息从配置文件读取

package db

import (
	"MyGo/util/config"
	"database/sql"
	"fmt"
	_ "github.com/go-sql-driver/mysql"
	"time"
)

/*
username 	用户名
password 	密码
host  		数据库地址
port		端口
agreement 	协议
database	数据库
*/
func ConnMysql(driverName, username, password, host, port, agreement, database string) *sql.DB {
	// 数据源信息
	dataSourceName := username + ":" + password + "@" + agreement + "(" + host + ":" + port + ")" + "/" + database + "?charset=utf8mb4&parseTime=True&loc=Local"
	// 验证 dataSourceName 格式是否正确,非连接测试
	db, err := sql.Open(driverName, dataSourceName)
	if err != nil {
		panic(err)
	}
	// 配置参数
	db.SetConnMaxLifetime(time.Minute * 10)
	db.SetConnMaxIdleTime(time.Minute * 10)
	db.SetMaxOpenConns(10)
	db.SetMaxIdleConns(10)
	// 连接数据库,会对数据源信息进行校验
	err = db.Ping()
	if err != nil {
		fmt.Println("数据库连接失败")
		panic(err)
	}
	// 返回数据源实例
	return db
}

// 获取默认数据源
func DefaultConn() *sql.DB {
	// 获取配置
	config := config.GetConfig("./config/", "config_dev", config.YAML)
	driverName := config.GetString("db.driverName")
	username := config.GetString("db.username")
	password := config.GetString("db.password")
	host := config.GetString("db.host")
	port := config.GetString("db.port")
	agreement := config.GetString("db.agreement")
	database := config.GetString("db.database")
	// 连接数据源
	return ConnMysql(driverName, username, password, host, port, agreement, database)
}

1.4 测试数据源是否有效

package main

import (
	userMapper "MyGo/mapper/user"
	"fmt"
	"log"
)

func main() {
	queryAllUser()
}

func queryAllUser() {
	users := userMapper.QueryUsers()
	if users == nil || len(users) == 0 {
		log.Fatal("QueryUsers is nil")
	}
	for i := range users {
		user := users[i]
		fmt.Println("user:", user)
	}
}

image.png

1.5 读取所有配置

package main

import (
	"MyGo/util/config"
	"fmt"
)

func main() {
	config := config.GetConfig("./config/", "config_dev", config.YAML)
	allSettings := config.AllSettings()
	fmt.Println(allSettings)
}

image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值