当前位置: 首页 > wzjs >正文

晋江网站建设晋江西安模板网站

晋江网站建设晋江,西安模板网站,wordpress实现前台登录功能,软件平台介绍一文讲懂Go语言如何使用配置文件连接数据库 viper1. viper简介2. viper 读取.toml配置文件定义Go语言结构体编写与Go语言结构体对应的.toml配置文件定义初始化函数定义get函数 连接数据库1. 定义数据库对象2. 定义初始化函数3. 定义 get 函数4. 定义 main 函数, 连接数据库 配置…

一文讲懂Go语言如何使用配置文件连接数据库

  • viper
    • 1. viper简介
    • 2. viper 读取.toml配置文件
      • 定义Go语言结构体
      • 编写与Go语言结构体对应的.toml配置文件
      • 定义初始化函数
      • 定义get函数
  • 连接数据库
    • 1. 定义数据库对象
    • 2. 定义初始化函数
    • 3. 定义 get 函数
    • 4. 定义 main 函数, 连接数据库

配置文件在软件开发和系统管理中扮演着重要的角色,它们用于定义软件运行时的各种参数和设置。其保证了项目代码的灵活性, 安全性, 维护性等多重性质。
本文以 viper 第三方库连接 MySQL为例, 讲解 go语言 如何使用配置文件连接数据库。

本文默认读者已经熟悉如何直接从 go语言 连接数据库。若需了解如何从go语言连接数据库可以点击 go语言连接MySQL数据库详解(单机版) 进行学习

viper

1. viper简介

Viper支持JSON, TOML, YAML, HCL, INI, envfile和Java Properties files文件。viper可以搜索多条路径,但是 目前,单个Viper实例只支持单个配置文件。

2. viper 读取.toml配置文件

TOML文件格式是一种旨在易于阅读且具有最小语义的配置文件格式。它由GitHub上的开发者Tom Preston-Werner创建,旨在成为一种更简单、更明确的替代JSON和YAML等其他配置文件格式的选择。其拥有易读性, 简介性, 明确性等优点。
.toml配置文件教程

下载 viper

go get github.com/spf13/viper  

定义Go语言结构体

# 因实际开发中不止需要配置数据库, 故使用嵌套结构体
type config struct {Database Database
}type Database struct {MySQL MySQLConf
}type MySQLConf struct {User         string `mapstructure:"user"`Password     string `mapstructure:"password"`Host         string `mapstructure:"host"`Port         int    `mapstructure:"port"`DBName       string `mapstructure:"db_name"`MaxOpenConns int    `mapstructure:"max_open_conns"`MaxIdleConns int    `mapstructure:"max_idle_conns"`Timeout      string `mapstructure:"timeout"`
}

编写与Go语言结构体对应的.toml配置文件

[databasse]
[database.mysql]
user = "Golang"
password = "go123123"
host = "localhost"
port = 3306
db_name= "test"
max_open_conns = 100
max_idle_conns = 20
timeout = "15s"

定义初始化函数

# 定义结构体对象
var c configfunc init() {# 设置配置文件的文件名viper.SetConfigName("config")# 设置配置文件的文件格式viper.SetConfigType("toml")# 设置配置文件的文件路径viper.AddConfigPath(".")# 日志文件对象logFile, err := os.OpenFile("/var/lib/APP/conf.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)if err != nil {log.Println(err)}defer logFile.Close()log.SetOutput(logFile)// 读取配置文件err = viper.ReadInConfig()if err != nil {log.Printf("config load Error: %v \n", err)} else {log.Println("configuration file was read successfully")}// 将 viper 读到的反数据序列化写入 config 对象中viper.Unmarshal(&c)
}

定义get函数

func GetConfig() *config {return &c
}

连接数据库

1. 定义数据库对象

var _db *sqlx.DB

2. 定义初始化函数

func init() {c := config.GetConfig()dbUser := c.Database.MySQL.UserdbPass := c.Database.MySQL.PassworddbHost := c.Database.MySQL.HostdbPort := c.Database.MySQL.PortdbName := c.Database.MySQL.DBNametimeout := c.Database.MySQL.TimeoutlogFile, err := os.OpenFile("/var/lib/APP/mysql.log",os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)if err != nil {log.Println(err)}defer logFile.Close()dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&timeout=%s", dbUser, dbPass, dbHost, dbPort, dbName, timeout)_db, err := sqlx.Connect("mysql", dsn)if err != nil {log.Printf("MySQL connect err: %v", err)}log.SetOutput(logFile)_db.SetMaxOpenConns(c.Database.MySQL.MaxOpenConns)_db.SetMaxIdleConns(c.Database.MySQL.MaxIdleConns)
}

3. 定义 get 函数

func GetDB() *sqlx.DB {return _db
}

4. 定义 main 函数, 连接数据库

func main() {mysql := mysql.GetDB()defer mysql.Close()sqlStr := "insert into sql_test.user(name, age) values (?, ?)"stmt, err := db.Prepare(sqlStr)if err != nil {fmt.Printf("prepare failed err: %v \n", err)}_, err = stmt.Exec("张三", 24)if err != nil {fmt.Printf("insert failed err: %v \n", err)}fmt.Println("insert success")
}

文章转载自:

http://6UturK4T.mfLhr.cn
http://tXWlSiMN.mfLhr.cn
http://yw5PUg20.mfLhr.cn
http://HH1bYlUX.mfLhr.cn
http://NMfiHx6M.mfLhr.cn
http://6kWy4LGM.mfLhr.cn
http://OBhAUquU.mfLhr.cn
http://gMjIEiSC.mfLhr.cn
http://XDcT29gP.mfLhr.cn
http://eYRQwAep.mfLhr.cn
http://6xf6Ltzg.mfLhr.cn
http://GUFR0cWW.mfLhr.cn
http://XkScsQlv.mfLhr.cn
http://tA5PEWMd.mfLhr.cn
http://omoUuUKz.mfLhr.cn
http://B5mFjakB.mfLhr.cn
http://TZxFxa4Z.mfLhr.cn
http://eQXM0VlO.mfLhr.cn
http://pmvcHjTl.mfLhr.cn
http://NgFnyaP8.mfLhr.cn
http://J9FBVJX4.mfLhr.cn
http://QqsvfSsO.mfLhr.cn
http://GBV4tU5E.mfLhr.cn
http://Oz4wQVt0.mfLhr.cn
http://mJfDvZd5.mfLhr.cn
http://37TrNWvv.mfLhr.cn
http://w1aFG06z.mfLhr.cn
http://03ohfrkQ.mfLhr.cn
http://EShuO4oD.mfLhr.cn
http://QBCwsCyF.mfLhr.cn
http://www.dtcms.com/wzjs/695955.html

相关文章:

  • 电子商务网站建设的目的是开展网络营销做淘宝这样的网站需要什么
  • 门户网站建设方案招标文件黄石公司做网站
  • 美容医疗 网站建设网站设计介绍演讲模板下载
  • 李沧网站建设电话大岭山营销型网站建设
  • 去哪里找人做网站绵阳网页制作公司
  • 小猫济南网站建设公司wordpress themememe wpex
  • jn建站系统官网爱心捐赠网站怎么做
  • 佛山营销网站建设服务公司网站推广公司官网
  • 资讯网站的优势医院网站建设 利法拉网络
  • 佛山贸易网站建设wordpress主题 自适应
  • 汕头网站关键词排名深圳网络推广怎么做
  • 用google翻译做多语言网站wordpress模板 购买
  • 网站做优化必须要ftp吗不用js可以做网站吗
  • 简单门户网站模板加盟网站做推广怎么收费
  • wordpress建站教程jiuyou网站如何搭建
  • 网站怎么免费建站wordpress去掉域名后缀
  • 如何选择响应式网站海口网站运营托管公司
  • 开店做网站有什么好处家居企业网站建设市场
  • 企业为什么要建站台呢图片模板制作app
  • 做pc端网站平台广州百度seo代理
  • 做物流网站有哪些内容seo搜索优化邵阳
  • 网站 云端网站建设 网站开发
  • 恩施市住房和城乡建设局网站建设个人网银登录入口
  • 域名备案个人网站名称北京公司建一个网站需要多少钱
  • 化妆品网站建设版块杭州建设工程网
  • 新开传奇网站曾劲松搜索引擎优化seo方案
  • 网站建设课程韩国电商网站
  • 企业免费建站软件html5开发wap网站
  • 杭州置地电商基地网站建设网站建设负责人证明
  • 贵阳有没有网站建设公司谷歌商店下载不了软件