上回我們定義了江湖裡三個重要的元素:門派、江湖兒女及武功,我不會告訴你武功是我後來偷偷練的。
這次我們要用筆(ent)把它們(表)畫出來(建立到資料庫)。為了儘量使目錄結構看起來規範,我建立了 cmd/migrate
目錄,並建立了 migrate.go
:
mkdir -pv cmd/migrate && cd $_
touch migrate.go
要建立到資料庫,我們首先要實現連線到資料庫的 Client,這裡要用到上回裡生成的 ent/client.go
,我們稍稍弄得複雜點,使其與 Golang 原生的 sql.DB
結合起來並加上連線池的配置。
package main
import (
"database/sql"
"github.com/BiLuoHui/ganshijiumei/ent"
ents "github.com/facebookincubator/ent/dialect/sql"
_ "github.com/lib/pq"
"log"
"time"
)
const (
dsn = "host=127.0.0.1 port=5432 user=hui password= dbname=hui sslmode=disable"
maxIdleConns = 6
maxOpenConns = 100
connMaxLifetime = time.Hour * 2
)
var client *ent.Client
func main() {
log.Println(client)
defer client.Close()
}
func init() {
db, err := sql.Open("postgres", dsn)
if err != nil {
log.Fatalln(err)
}
db.SetMaxIdleConns(maxIdleConns)
db.SetMaxOpenConns(maxOpenConns)
db.SetConnMaxLifetime(connMaxLifetime)
drv := ents.OpenDB("postgres", db)
client = ent.NewClient(ent.Driver(drv))
}
為了不使文章變得複雜,將配置放在常量裡,並使用 init 函式來初始化 client ,工作中請勿使用此不良操作。
我們建立一個 migrate
函式來實現 migrate 功能,它在出錯時直接列印錯誤並退出。
func main() {
migrate(context.Background())
defer client.Close()
}
func migrate(ctx context.Context) {
if err := client.Schema.Create(ctx); err != nil {
log.Fatalf("failed creating schema resources: %v\n", err)
}
}
然後在 cmd/migrate
目錄下執行 go build
來生可執行檔案 migrate,最後我們執行它 ./migrate
。讓我們來看看建立好後的表結構:
我們看到表的自增主鍵 ent
自動幫我們加上了,如果你使用 UUID 來做主鍵,只需要在 Schema 欄位定義中加上:
field.UUID("id", uuid.UUID{}),
至此,江湖三要素:門派、江湖兒女、武功構建完成。
本作品採用《CC 協議》,轉載必須註明作者和本文連結