Golang初始化MySQL數(shù)據(jù)庫方法淺析
安裝依賴
主要這邊還需要安裝兩個依賴,gorm、viper ,具體的可以訪問他們的官網(wǎng)(Gorm官網(wǎng)地址 Viper Github地址)
初始化配置
在根目錄下打開終端執(zhí)行:
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
創(chuàng)建文件
創(chuàng)建一個yml文件(application.yml)
#server:
# post: 8888
datasource:
driverName: mysql
host: # 端口地址
port: # 端口號
database: # 數(shù)據(jù)庫名稱
username: # 賬號
password: # 密碼
charset: utf8
在目錄下創(chuàng)建一個common包,包下再創(chuàng)建一個database.go文件,內(nèi)部寫一個初始化數(shù)據(jù)庫,建議拆分出來,這樣拼接的方式有利于項目在不同環(huán)境下進(jìn)行快速的更改配置。
package common
import (
"fmt"
// 看清楚引入包,包的差異存在方法差異
"github.com/jinzhu/gorm"
"github.com/spf13/viper"
)
// 用大寫聲明(可以全局訪問)
var DB *gorm.DB
// 創(chuàng)建數(shù)據(jù)庫連接池
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 自動創(chuàng)建表,需要放入model層中的模型,比如 User{}
db.AutoMigrate(User{})
// 進(jìn)行賦值 否則會空指針
DB = db
return db
}
// 獲取DB的示例
func GetDB() *gorm.DB {
return DB
}main函數(shù)執(zhí)行
在根目錄下創(chuàng)建一個main文件(唯一),在這個環(huán)境我們需要做做一個初始化配置文件的操作,在main中優(yōu)先加載這個config,然后才是初始化數(shù)據(jù)庫,順序不能錯哈,因為數(shù)據(jù)庫的連接信息在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()
// 嘗試連接數(shù)據(jù)庫
db := common.InitDB()
// 延遲關(guān)閉
defer db.Close()
r := gin.Default()
// 加載路由
r = CollectRouter(r)
// 監(jiān)聽的端口
// 可以在yml中定義server端口并且使用yml文件中定義的端口
// port := viper.GetString("server.port")
if port != "" {
panic(r.Run(":" + port))
}
r.Run(":9000") // 測試端口 9000 上啟動服務(wù)
}
// 初始化config文件
func InitConfig() {
workDir, _ := os.Getwd()
// 讀取的文件名
viper.SetConfigName("application")
// 讀取的文件類型
viper.SetConfigType("yml")
// 讀取的路徑
viper.AddConfigPath(workDir + "/config")
err := viper.ReadInConfig()
if err != nil {
panic("")
}
}到此這篇關(guān)于Golang初始化數(shù)據(jù)庫方法淺析的文章就介紹到這了,更多相關(guān)Go初始化數(shù)據(jù)庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于HLS創(chuàng)建Golang視頻流服務(wù)器的優(yōu)缺點
HLS 是 HTTP Live Streaming 的縮寫,是蘋果開發(fā)的一種基于 HTTP 的自適應(yīng)比特率流媒體傳輸協(xié)議。這篇文章主要介紹了基于 HLS 創(chuàng)建 Golang 視頻流服務(wù)器,需要的朋友可以參考下2021-08-08
golang使用viper加載配置文件實現(xiàn)自動反序列化到結(jié)構(gòu)
這篇文章主要為大家介紹了golang使用viper加載配置文件實現(xiàn)自動反序列化到結(jié)構(gòu)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
golang?pprof監(jiān)控memory?block?mutex統(tǒng)計原理分析
這篇文章主要為大家介紹了golang?pprof監(jiān)控memory?block?mutex統(tǒng)計原理分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04

