Golang初始化MySQL數(shù)據(jù)庫方法淺析
安裝依賴
主要這邊還需要安裝兩個依賴,gorm
、viper
,具體的可以訪問他們的官網(wǎng)(Gorm官網(wǎng)地址 Viper Github地址)
初始化配置
在根目錄下打開終端執(zhí)行:
go mod init 項(xiàng)目名稱 (例如: 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ù)庫,建議拆分出來,這樣拼接的方式有利于項(xiàng)目在不同環(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ù)庫,順序不能錯哈,因?yàn)閿?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)文章
Golang迭代如何在Go中循環(huán)數(shù)據(jù)結(jié)構(gòu)使用詳解
這篇文章主要為大家介紹了Golang迭代之如何在Go中循環(huán)數(shù)據(jù)結(jié)構(gòu)使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10淺析Go項(xiàng)目中的依賴包管理與Go?Module常規(guī)操作
這篇文章主要為大家詳細(xì)介紹了Go項(xiàng)目中的依賴包管理與Go?Module常規(guī)操作,文中的示例代碼講解詳細(xì),對我們深入了解Go語言有一定的幫助,需要的可以跟隨小編一起學(xué)習(xí)一下2023-10-10Golang 類型轉(zhuǎn)換的實(shí)現(xiàn)(斷言、強(qiáng)制、顯式類型)
將一個值從一種類型轉(zhuǎn)換到另一種類型,便發(fā)生了類型轉(zhuǎn)換,在go可以分為斷言、強(qiáng)制、顯式類型轉(zhuǎn)換,本文就詳細(xì)的介紹一下這就幾種轉(zhuǎn)換方式,具有一定的參考價值,感興趣的可以了解一下2023-09-09Golang中常見的三種并發(fā)控制方式使用小結(jié)
這篇文章主要為大家詳細(xì)介紹了如何對goroutine并發(fā)行為的控制,在Go中最常見的有三種方式:sync.WaitGroup、channel和Context,下面我們就來看看他們的具體使用吧2024-01-01Golang 經(jīng)典校驗(yàn)庫 validator 用法解析
這篇文章主要為大家介紹了Golang 經(jīng)典校驗(yàn)庫 validator 用法解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08