IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> golang初始化数据库(MySQL) -> 正文阅读

[大数据]golang初始化数据库(MySQL)

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("")
	}
}
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-10-22 21:22:23  更:2022-10-22 21:25:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年4日历 -2025/4/22 12:32:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码