Skip to content

初始化

首先,我们介绍一下如何初始化 Cosy。

main.go 中,我们需要注册模型,注册初始化函数,注册 goroutine,然后启动 Cosy。

  1. 注册模型 cosy.RegisterModels(model ...any),将 model 中的模型注册到 Cosy 中, 在启动时将会执行数据库自动迁移,同时会将模型的反射结果缓存到 map 中以便后续使用。
  2. 注册初始化函数 RegisterInitFunc(f ...func())
  3. 注册 goroutine RegisterGoroutine(f ...func())
  4. 启动 Cosy

数据库初始化

我提供了数据库连接初始化函数cosy.InitDB(db *gorm.DB),可以在 RegisterInitFunc 中调用这个函数。

示例

这里以 MySQL 驱动为例,settings.DataBaseSettings 是 Cosy 中预定义的数据库连接设置。

go
package main

import (
	"github.com/uozi-tech/cosy"
	"github.com/uozi-tech/cosy-driver-mysql"
	"github.com/uozi-tech/cosy/settings"
)

func main() {
	// ...
	cosy.RegisterInitFunc(func() {
		cosy.InitDB(mysql.Open(settings.DataBaseSettings))
	})
	// ...
}

MySQL

安装

bash
go get -u github.com/uozi-tech/cosy-driver-mysql

调用

go
mysql.Open(settings.DataBaseSettings)

Postgres

安装

bash
go get -u github.com/uozi-tech/cosy-driver-postgres

调用

go
postgres.Open(settings.DataBaseSettings)

Sqlite

安装

bash
go get -u github.com/uozi-tech/cosy-driver-sqlite

调用

go
sqlite.Open(settings.DataBaseSettings)

完整示例

go
package main

import (
	"flag"
	"github.com/uozi-tech/cosy"
	"github.com/uozi-tech/cosy-driver-mysql"
	"github.com/uozi-tech/cosy/settings"
	"github.com/0xJacky/store/internal/analytic"
	"github.com/0xJacky/store/model"
	"github.com/0xJacky/store/query"
	"github.com/0xJacky/store/router"
)

type Config struct {
	ConfPath string
}

var cfg Config

func init() {
	flag.StringVar(&cfg.ConfPath, "config", "app.ini", "Specify the configuration file")
	flag.Parse()
}

func main() {
	// 注册模型
	cosy.RegisterModels(model.GenerateAllModel()...)

	// 注册初始化函数
	cosy.RegisterInitFunc(func() {
		db := cosy.InitDB(mysql.Open(settings.DataBaseSettings))
		query.Init(db)
		model.Use(db)
	}, router.InitRouter)

	// 注册 goroutine 执行
	cosy.RegisterGoroutine(analytic.RecordServerAnalytic)

	// Cosy,启动!
	cosy.Boot(cfg.ConfPath)
}