最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang初始化MySQL數(shù)據(jù)庫方法淺析

 更新時間:2023年05月19日 09:26:37   作者:三杯溫開水  
這篇文章主要介紹了Golang初始化MySQL數(shù)據(jù)庫的方法,數(shù)據(jù)庫的建立第一步即要初始化,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧

安裝依賴

主要這邊還需要安裝兩個依賴,gormviper ,具體的可以訪問他們的官網(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創(chuàng)建Golang視頻流服務(wù)器的優(yōu)缺點

    HLS 是 HTTP Live Streaming 的縮寫,是蘋果開發(fā)的一種基于 HTTP 的自適應(yīng)比特率流媒體傳輸協(xié)議。這篇文章主要介紹了基于 HLS 創(chuàng)建 Golang 視頻流服務(wù)器,需要的朋友可以參考下
    2021-08-08
  • 用Go快速上手Protocol Buffers詳解

    用Go快速上手Protocol Buffers詳解

    Protobuf是一種高效的跨語言序列化協(xié)議,適用于Go語言,本文介紹了如何安裝和使用Protobuf,包括定義協(xié)議、生成Go代碼、序列化和反序列化,以及版本演進(jìn)和兼容性,通過一個完整的示例,展示了如何在Go項目中使用Protobuf
    2025-11-11
  • Go語言常見錯誤之a(chǎn)ny沒傳遞任何信息解決分析

    Go語言常見錯誤之a(chǎn)ny沒傳遞任何信息解決分析

    Go語言,由于其高效強大的并行處理能力和優(yōu)雅簡單的設(shè)計哲學(xué),一直以來都是編程世界的寵兒,然而,對于一些Go新手和甚至熟悉Go的程序員也可能會遇到一個常見的錯誤:?any沒傳遞任何信息,那么,如何規(guī)避這個錯誤,本文將揭示其中的秘密
    2024-01-01
  • go中l(wèi)og包的實現(xiàn)示例

    go中l(wèi)og包的實現(xiàn)示例

    log包是Go語言標(biāo)準(zhǔn)庫中的日志庫,用于記錄程序的運行信息,本文主要介紹了go中l(wèi)og包的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2025-09-09
  • GO語言開發(fā)終端命令行小工具改進(jìn)更新

    GO語言開發(fā)終端命令行小工具改進(jìn)更新

    這篇文章主要為大家介紹了GO語言開發(fā)終端命令行小工具的改進(jìn)更新,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Go語言實現(xiàn)單例模式的多種方法

    Go語言實現(xiàn)單例模式的多種方法

    單例模式是一種創(chuàng)建型設(shè)計模式,Go中常見實現(xiàn)包括使用sync.Once、雙重檢查鎖定和原子操作法,每種方法都有其獨特的優(yōu)點和適用場景,下面就來具體介紹一下
    2025-07-07
  • golang使用viper加載配置文件實現(xiàn)自動反序列化到結(jié)構(gòu)

    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)計原理分析

    這篇文章主要為大家介紹了golang?pprof監(jiān)控memory?block?mutex統(tǒng)計原理分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Go語言死鎖與goroutine泄露問題的解決

    Go語言死鎖與goroutine泄露問題的解決

    最近在工作中使用golang編程,今天的文章給大家分享一下Go語言死鎖與goroutine泄露問題,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • golang接口的正確用法分享

    golang接口的正確用法分享

    這篇文章主要介紹了golang接口的正確用法分享的相關(guān)資料,需要的朋友可以參考下
    2023-09-09

最新評論

嘉义市| 静宁县| 大化| 集贤县| 沾化县| 环江| 宜丰县| 扶沟县| 兴国县| 吉安市| 滦南县| 博白县| 沙洋县| 博野县| 桂林市| 遂平县| 原阳县| 银川市| 广水市| 林甸县| 苍梧县| 山东| 汨罗市| 禄劝| 南溪县| 金门县| 玉门市| 金坛市| 沈丘县| 荔波县| 和林格尔县| 乐昌市| 子洲县| 泗洪县| 桐柏县| 巴彦县| 阳谷县| 剑河县| 尚志市| 固镇县| 那坡县|