簡介
在 go 中連線資料庫的方式有很多, 這裡我們選擇使用 orm 的方式, 也就不用寫原生的 sql 語句了.
go 的 orm 庫也有很多, 這裡選擇了 gorm.
安裝 gorm
啟動資料庫
資料庫選擇了最主流的 mysql.
建立資料庫的方式有很多, 為了便於清理, 選擇使用 docker 建立資料庫.
新建乙個 docker-compose.yml 檔案, 在根目錄下:
version:"3.7"services:mysql:image:mysql:8command:--default-authentication-plugin=mysql_native_passwordenvironment:mysql_root_password:1234ports:- 3306:3306adminer:image:adminer:4ports:- 8080:8080dbclient:image:mysql:8command:mysql -hmysql -uroot -p# source /home/script/db.sql# select * from tb_users \g;volumes:- ./script:/home/script
執行下面的命令在後台啟動資料庫:
docker-compose up -d mysql
使用下面的命令連線到 msyql 的 cli 上:
docker-compose run --rm dbclient
這會提示你輸入密碼, 密碼是 1234 (在 mysql 的環境變數 mysql_root_password 中設定).
然後, 在 cli 中輸入以下 sql, 建立乙個**:
create database if not exists `db_apiserver`;
接下來, 就可以完善 go **了.
初始化資料庫連線
在根目錄下建立乙個 model 資料夾, 這裡定義資料模型, 以及資料庫的初始連線.
在 model 目錄下建立乙個 init.go 檔案, 用於初始化資料庫連線.
logrus.infof("資料庫連線成功, 資料庫名字: %s", name)
setupdb(db)
return db
func setupdb(db *gorm.db) {
db.logmode(viper.getbool("gormlog"))
// 用於設定最大開啟的連線數,預設值為0表示不限制.設定最大的連線數,可以避免併發太高導致連線mysql出現too many connections的錯誤。 // 用於設定閒置的連線數.設定閒置的連線數則當開啟的乙個連線使用完成後可以放在池裡等候下一次使用。 db.db().setmaxidleconns(0)
func initdb() *gorm.db {
return opendb(
viper.getstring("db.username"),
viper.getstring("db.password"),
viper.getstring("db.addr"),
viper.getstring("db.name"),
func getdb() *gorm.db {
return initdb()
注意匯入的時候, 需要匯入對應的資料庫驅動, mysql 需要如下的匯入:
主要是定義了乙個結構來儲存資料庫例項 *gorm.db, 用到了單例模式:
type database struct {
self *gorm.db
// 單例var db *database
然後定義了資料庫的初始化方法和關閉方法.
開啟的時候用到了配置檔案中的引數, 需要在配置檔案 config.yaml 中新增如下的引數:
db:name:db_apiserveraddr:127.0.0.1:3306username:rootpassword:"1234"
伺服器啟動時連線資料庫
在 runserver 函式中新增下面的**:
// 初始化資料庫model.db.init()
defer model.db.close()
總結其實連線資料庫的問題並不太大, 以前覺得麻煩是因為在本地啟動乙個資料庫麻煩, 但是在有了 docker 之後, 一切就變得簡單可重複了, 再也不用擔心相容性了.
當前部分的**
go mysql連線 Go連線MYSQL
go原生提供了連線資料庫操作的支援,在用 golang進行開發的時候,如果需要在和資料庫互動,則可以使用database sql包。這是乙個對關係型資料庫的通用抽象,它提供了標準的 輕量的 面向行的介面。在go中訪問資料庫需要用到sql.db介面 它可以建立語句 statement 和事務 tran...
go中mysql連線 Go 連線MySQL
go操作mysql 連線go語言中的database sql包提供了保證sql或類sql資料庫的泛用介面,並不提供具體的資料庫驅動。使用database sql包時必須注入 至少 乙個資料庫驅動。我們常用的資料庫基本上都有完整的第三方實現。例如 mysql驅動 使用mysql驅動 func open...
go連線mysql集群 Go連線MYSQL
go原生提供了連線資料庫操作的支援,在用 golang進行開發的時候,如果需要在和資料庫互動,則可以使用database sql包。這是乙個對關係型資料庫的通用抽象,它提供了標準的 輕量的 面向行的介面。在go中訪問資料庫需要用到sql.db介面 它可以建立語句 statement 和事務 tran...