Golang初始化MySQL数据库方法浅析

 更新时间:2023年05月19日 09:26:37   作者:三杯温开水  
这篇文章主要介绍了Golang初始化MySQL数据库的方法,数据库的建立第一步即要初始化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

安装依赖

主要这边还需要安装两个依赖,gormviper ,具体的可以访问他们的官网(Gorm官网地址 Viper Github地址)

初始化配置

在根目录下打开终端执行:

go mod init 项目名称 (例如: go mod init demo )

安装依赖

go get github.com/jinzhu/gorm 或 go get -u gorm.io/gorm

go get -u gorm.io/driver/mysql

go get github.com/spf13/viper

创建文件

创建一个yml文件(application.yml)

#server:
#  post: 8888
datasource:
  driverName: mysql
  host: # 端口地址
  port: # 端口号
  database: # 数据库名称
  username: # 账号
  password: # 密码
  charset: utf8

在目录下创建一个common包,包下再创建一个database.go文件,内部写一个初始化数据库,建议拆分出来,这样拼接的方式有利于项目在不同环境下进行快速的更改配置。

package common
import (
	"fmt"
	// 看清楚引入包,包的差异存在方法差异
	"github.com/jinzhu/gorm" 
	"github.com/spf13/viper"
)
// 用大写声明(可以全局访问)
var DB *gorm.DB
// 创建数据库连接池
func InitDB() *gorm.DB {
	driverName := viper.GetString("datasource.driverName")
	host := viper.GetString("datasource.host")
	port := viper.GetString("datasource.port")
	database := viper.GetString("datasource.database")
	username := viper.GetString("datasource.username")
	password := viper.GetString("datasource.password")
	charset := viper.GetString("datasource.charset")
	args := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s&parseTime=true",
		username,
		password,
		host,
		port,
		database,
		charset)
	db, err := gorm.Open(driverName, args)
	if err != nil {
		fmt.Println("fail err mysql", err.Error())
	}
	// gorm 自动创建表,需要放入model层中的模型,比如 User{}
	db.AutoMigrate(User{})
	// 进行赋值 否则会空指针
	DB = db
	return db
}
// 获取DB的示例
func GetDB() *gorm.DB {
	return DB
}

main函数执行

在根目录下创建一个main文件(唯一),在这个环境我们需要做做一个初始化配置文件的操作,在main中优先加载这个config,然后才是初始化数据库,顺序不能错哈,因为数据库的连接信息在yml文件中,所以不要将顺序搞错。

package main
import (
	"github.com/gin-gonic/gin"
	_ "github.com/go-sql-driver/mysql"
	"github.com/spf13/viper"
	"go-gin-vue/common"
	"os"
)
func main() {
	InitConfig()
	// 尝试连接数据库
	db := common.InitDB()
	// 延迟关闭
	defer db.Close()
	r := gin.Default()
	// 加载路由
	r = CollectRouter(r)
	// 监听的端口
	// 可以在yml中定义server端口并且使用yml文件中定义的端口
	// port := viper.GetString("server.port") 
	if port != "" {
		panic(r.Run(":" + port))
	}
	r.Run(":9000") // 测试端口 9000 上启动服务
}
// 初始化config文件
func InitConfig() {
	workDir, _ := os.Getwd()
	// 读取的文件名
	viper.SetConfigName("application")
	// 读取的文件类型
	viper.SetConfigType("yml")
	// 读取的路径
	viper.AddConfigPath(workDir + "/config")
	err := viper.ReadInConfig()
	if err != nil {
		panic("")
	}
}

到此这篇关于Golang初始化数据库方法浅析的文章就介绍到这了,更多相关Go初始化数据库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Hugo 游乐场内容初始化示例详解

    Hugo 游乐场内容初始化示例详解

    这篇文章主要为大家介绍了Hugo 游乐场内容初始化示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • GO语言创建钱包并遍历钱包(wallet)的实现代码

    GO语言创建钱包并遍历钱包(wallet)的实现代码

    比特币钱包实际上是一个密钥对,当你安装 一个钱包应用,或者是使用一个比特币客户端来生成一个新地址是,他就会为你生成一个密钥对,今天通过本文给大家分享go语言遍历钱包的相关知识,一起看看吧
    2021-05-05
  • Go语言基本的语法和内置数据类型初探

    Go语言基本的语法和内置数据类型初探

    这篇文章主要介绍了Go语言基本的语法和内置数据类型,是golang入门学习中的基础知识,需要的朋友可以参考下
    2015-10-10
  • Golang设计模式之外观模式讲解和代码示例

    Golang设计模式之外观模式讲解和代码示例

    外观是一种结构型设计模式, 能为复杂系统、 程序库或框架提供一个简单 (但有限) 的接口,这篇文章就给大家详细介绍一下Golang的外观模式,文中有详细的代码示例,具有一定的参考价值,需要的朋友可以参考下
    2023-06-06
  • golang实现微信支付v3版本的方法

    golang实现微信支付v3版本的方法

    这篇文章主要介绍了golang实现微信支付v3版本的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • go-micro开发RPC服务以及运行原理介绍

    go-micro开发RPC服务以及运行原理介绍

    这篇文章介绍了go-micro开发RPC服务的方法及其运行原理,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • 解决go语言ssh客户端密码过期问题

    解决go语言ssh客户端密码过期问题

    这篇文章主要介绍了go语言ssh客户端解决密码过期问题,本文给大家分享了解决的方法和原理,非常不错,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • Go语言单元测试的实现及用例

    Go语言单元测试的实现及用例

    在日常开发中,我们通常需要针对现有的功能进行单元测试,以验证开发的正确性,本文主要介绍了Go语言单元测试的实现及用例,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • Go语言开发k8s之Service操作解析

    Go语言开发k8s之Service操作解析

    这篇文章主要为大家介绍了Go语言开发k8s之Service操作解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Go调用链可视化工具使用实例探究

    Go调用链可视化工具使用实例探究

    本文介绍一款工具 go-callvis,它能够将 Go 代码的调用关系可视化出来,并提供了可交互式的 web 服务,在接手他人代码或调研一些开源项目时,如果能够理清其中的代码调用链路,这将加速我们对实现的理解
    2024-01-01

最新评论