热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Go项目中数据库配置文件的优化与应用

首先在项目的根目录下创建一个co


首先在项目的根目录下创建一个config.json文件,内容如下:

{
"database": {
"Dialect": "mysql",
"Database": "***", /*数据库名*/
"User": "***",/*用户名*/
"Password": "***",/*密码*/
"Charset": "utf8", /*字符集 utf8 */
"Host": "127.0.0.1", /*数据库地址*/
"Port": 3306, /*数据库端口*/
"MaxIdleConns": 5, /*空闲时最大的连接数*/
"MaxOpenConns": 10 /*最大的连接数*/
}
}

然后在根目录下创建一个config文件夹,然后创建config.go文件,内容如下:

package config
import (
"github.com/goes/logger"
"github.com/goes/utils"
"encoding/json"
"fmt"
"io/ioutil"
"os"
"regexp"
)
var jsonData map[string]interface{}
func initJSON() {
bytes, err := ioutil.ReadFile("./config.json")
if err != nil {
logger.Error("ReadFile: ", err.Error())
os.Exit(-1)
}
// 去除注释
configStr := string(bytes[:])
reg := regexp.MustCompile(`/\*.*\*/`)
cOnfigStr= reg.ReplaceAllString(configStr, "")
bytes = []byte(configStr)
if err := json.Unmarshal(bytes, &jsonData); err != nil {
logger.Log("json parse fail", err.Error())
os.Exit(-1)
}
}
type dbConfig struct {
Dialect string
Database string
User string
Password string
Charset string
Host string
Port int
URL string
MaxIdleConns int
MaxOpenConns int
}
var DBConfig dbConfig
func initDB() {
utils.SetObjectByJSON(&DBConfig, jsonData["database"].(map[string]interface{}))
url := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=%s&parseTime=True&loc=Local",
DBConfig.User,
DBConfig.Password,
DBConfig.Host,
DBConfig.Port,
DBConfig.Database,
DBConfig.Charset)
DBConfig.URL = url
}
func init() {
initJSON()
initDB()
}

项目中的使用方法如下:

/**
* 初始化启动数据库服务
*/
func init() {
fmt.Println("数据库持久化服务器启动:")
db, err := gorm.Open(config.DBConfig.Dialect, config.DBConfig.URL)
if err != nil {
fmt.Println("open db connect error.", err)
os.Exit(-1)
}
db.DB().SetMaxIdleConns(config.DBConfig.MaxIdleConns)
db.DB().SetMaxOpenConns(config.DBConfig.MaxOpenConns)
model.DB = db
}


推荐阅读
  • 掌握PHP编程必备知识与技巧——全面教程在当今的PHP开发中,了解并运用最新的技术和最佳实践至关重要。本教程将详细介绍PHP编程的核心知识与实用技巧。首先,确保你正在使用PHP 5.3或更高版本,最好是最新版本,以充分利用其性能优化和新特性。此外,我们还将探讨代码结构、安全性和性能优化等方面的内容,帮助你成为一名更高效的PHP开发者。 ... [详细]
  • 开发笔记:深入解析Android自定义控件——Button的72种变形技巧
    开发笔记:深入解析Android自定义控件——Button的72种变形技巧 ... [详细]
  • 在尝试对从复杂 XSD 生成的类进行序列化时,遇到了 `NullReferenceException` 错误。尽管已经花费了数小时进行调试和搜索相关资料,但仍然无法找到问题的根源。希望社区能够提供一些指导和建议,帮助解决这一难题。 ... [详细]
  • 深入解析:使用C++实现Python字节数组(struct)的高效处理方法 ... [详细]
  • 利用树莓派畅享落网电台音乐体验
    最近重新拾起了闲置已久的树莓派,这台小巧的开发板已经沉寂了半年多。上个月闲暇时间较多,我决定将其重新启用。恰逢落网电台进行了改版,回忆起之前在树莓派论坛上看到有人用它来播放豆瓣音乐,便萌生了同样的想法。通过一番调试,终于实现了在树莓派上流畅播放落网电台音乐的功能,带来了全新的音乐享受体验。 ... [详细]
  • 本文详细探讨了Zebra路由软件中的线程机制及其实际应用。通过对Zebra线程模型的深入分析,揭示了其在高效处理网络路由任务中的关键作用。文章还介绍了线程同步与通信机制,以及如何通过优化线程管理提升系统性能。此外,结合具体应用场景,展示了Zebra线程机制在复杂网络环境下的优势和灵活性。 ... [详细]
  • 利用Flask框架进行高效Web应用开发
    本文探讨了如何利用Flask框架高效开发Web应用,以满足特定业务需求。具体案例中,一家餐厅希望每天推出不同的特色菜,并通过网站向顾客展示当天的特色菜。此外,还增加了一个介绍页面,在bios路径下详细展示了餐厅主人、厨师和服务员的背景和简介。通过Flask框架的灵活配置和简洁代码,实现了这一功能,提升了用户体验和餐厅的管理水平。 ... [详细]
  • 本文深入探讨了 hCalendar 微格式在事件与时间、地点相关活动标记中的应用。作为微格式系列文章的第四篇,前文已分别介绍了 rel 属性用于定义链接关系、XFN 微格式增强链接的人际关系描述以及 hCard 微格式对个人和组织信息的描述。本次将重点解析 hCalendar 如何通过结构化数据标记,提高事件信息的可读性和互操作性。 ... [详细]
  • Spring框架中的面向切面编程(AOP)技术详解
    面向切面编程(AOP)是Spring框架中的关键技术之一,它通过将横切关注点从业务逻辑中分离出来,实现了代码的模块化和重用。AOP的核心思想是将程序运行过程中需要多次处理的功能(如日志记录、事务管理等)封装成独立的模块,即切面,并在特定的连接点(如方法调用)动态地应用这些切面。这种方式不仅提高了代码的可维护性和可读性,还简化了业务逻辑的实现。Spring AOP利用代理机制,在不修改原有代码的基础上,实现了对目标对象的增强。 ... [详细]
  • 在GitHub上克隆vue-element-admin项目时遇到依赖安装错误
    在 GitHub 上克隆 vue-element-admin 项目后,使用 `npm install` 安装依赖时遇到了未知的 Git 错误。具体错误信息为 `npm ERR! code 128`,提示命令执行失败。这可能是由于网络问题、Git 配置不正确或某些依赖包的仓库地址无效导致的。建议检查网络连接、更新 Git 版本并确保所有依赖项的 URL 正确无误。 ... [详细]
  • CentOS 7环境下Jenkins的安装与前后端应用部署详解
    CentOS 7环境下Jenkins的安装与前后端应用部署详解 ... [详细]
  • 本文探讨了利用Java实现WebSocket实时消息推送技术的方法。与传统的轮询、长连接或短连接等方案相比,WebSocket提供了一种更为高效和低延迟的双向通信机制。通过建立持久连接,服务器能够主动向客户端推送数据,从而实现真正的实时消息传递。此外,本文还介绍了WebSocket在实际应用中的优势和应用场景,并提供了详细的实现步骤和技术细节。 ... [详细]
  • 本文深入探讨了使用Puppet进行软件包分发与管理的方法。首先介绍了fpm这一跨平台的软件包制作工具,其简便的操作流程使得软件包的创建变得轻松快捷。fpm的项目地址为:https://github.com/jordansissel/fpm。通过结合Puppet和fpm,可以实现高效、可靠的软件包管理和部署。 ... [详细]
  • 在本篇教程中,我们将详细介绍如何通过 GitHub Pages 和 Hexo 对博客首页进行优化,并实现文章互动功能。具体包括如何集成百度统计,注册并登录百度统计网站(https://tongji.baidu.com/web/welcome/login),获取统计代码并将其嵌入到博客中,以便实时监控访问数据和用户行为。此外,我们还将探讨如何添加评论系统,提升读者参与度和互动体验。 ... [详细]
  • 本题库精选了Java核心知识点的练习题,旨在帮助学习者巩固和检验对Java理论基础的掌握。其中,选择题部分涵盖了访问控制权限等关键概念,例如,Java语言中仅允许子类或同一包内的类访问的访问权限为protected。此外,题库还包括其他重要知识点,如异常处理、多线程、集合框架等,全面覆盖Java编程的核心内容。 ... [详细]
author-avatar
庾事镁
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有