簡介
在 go 中連線資料庫的方式有很多, 這裡我們選擇使用 orm 的方式,
也就不用寫原生的 sql 語句了.
go 的 orm 庫也有很多, 這裡選擇了 gorm.
安裝 gorm
go get -u github.com/jinzhu/gorm
啟動資料庫
資料庫選擇了最主流的 mysql.
建立資料庫的方式有很多, 為了便於清理, 選擇使用 docker 建立資料庫.
新建乙個 docker-compose.yml 檔案, 在根目錄下:
version: "3.7"
services:
mysql:
image: mysql:8
command: --default-authentication-plugin=mysql_native_password
environment:
mysql_root_password: 1234
ports:
- 3306:3306
adminer:
image: adminer:4
ports:
- 8080:8080
dbclient:
image: mysql:8
command: 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 檔案, 用於初始化資料庫連線.
// 單例
var db *database
func
(db *database)
init()
}func
(db *database)
close()
func
opendb
(username, password, addr, name string
)*gorm.db
else
setupdb
(db)
return db
}func
setupdb
(db *gorm.db)
func
initdb()
*gorm.db
func
getdb()
*gorm.db
注意匯入的時候, 需要匯入對應的資料庫驅動, mysql 需要如下的匯入:
主要是定義了乙個結構來儲存資料庫例項 *gorm.db , 用到了單例模式:
type database struct
// 單例
var db *database
然後定義了資料庫的初始化方法和關閉方法.
開啟的時候用到了配置檔案中的引數, 需要在配置檔案 config.yaml 中新增如下的引數:
db: name: db_apiserver
addr:
127.0
.0.1
:3306
username: root
password:
"1234"
伺服器啟動時連線資料庫
在 runserver 函式中新增下面的**:
// 初始化資料庫
model.db.
init()
defer model.db.
close
()
總結
其實連線資料庫的問題並不太大, 以前覺得麻煩是因為在本地啟動乙個資料庫麻煩,
但是在有了 docker 之後, 一切就變得簡單可重複了, 再也不用擔心相容性了.
Go連線資料庫
1.1.2 使用 1.1.3 資料來源連線名 1.1.4 實戰連線 1.2 運算元據庫 1.3 事務 記得一定要導這個包 連線到資料庫.db.close 記得導包 github.com go sql driver mysql 否則會報錯sql unknown driver mysql forgott...
go mysql連線 使用 Go 連線資料庫
簡介 在 go 中連線資料庫的方式有很多,這裡我們選擇使用 orm 的方式,也就不用寫原生的 sql 語句了.go 的 orm 庫也有很多,這裡選擇了 gorm.安裝 gorm 啟動資料庫 資料庫選擇了最主流的 mysql.建立資料庫的方式有很多,為了便於清理,選擇使用 docker 建立資料庫.新...
連線資料庫
2 documents 目錄就是我們可以用來寫入並儲存檔案得地方,一般可通過 nsarray paths nssearchpathfordirectoriesindomains nsdocumentdirectory,nsuserdomainmask,yes nsstring documentsdi...