diff --git a/main.go b/main.go index 5257788..94705ca 100644 --- a/main.go +++ b/main.go @@ -3,6 +3,7 @@ package main import ( "database/sql" "fmt" + "goblog/pkg/database" "goblog/pkg/logger" "goblog/pkg/route" "goblog/pkg/types" @@ -498,8 +499,8 @@ func (a Article) Delete() (rowsAffected int64, err error) { } func main() { - initDB() - createTables() + database.Initialize() + db = database.DB route.Initialize() router = route.Router diff --git a/pkg/database/database.go b/pkg/database/database.go new file mode 100644 index 0000000..0a8627b --- /dev/null +++ b/pkg/database/database.go @@ -0,0 +1,60 @@ +package database + +import ( + "database/sql" + "time" + + "github.com/go-sql-driver/mysql" + + "goblog/pkg/logger" +) + +// DB 数据库对象 +var DB *sql.DB + +// Initialize 初始化数据库 +func Initialize() { + initDB() + createTables() +} + +func initDB() { + + var err error + + // 设置数据库连接信息 + config := mysql.Config{ + User: "root", + Passwd: "secret", + Addr: "127.0.0.1:3306", + Net: "tcp", + DBName: "goblog", + AllowNativePasswords: true, + } + + // 准备数据库连接池 + DB, err = sql.Open("mysql", config.FormatDSN()) + logger.LogError(err) + + // 设置最大连接数 + DB.SetMaxOpenConns(100) + // 设置最大空闲连接数 + DB.SetMaxIdleConns(25) + // 设置每个链接的过期时间 + DB.SetConnMaxLifetime(5 * time.Minute) + + // 尝试连接,失败会报错 + err = DB.Ping() + logger.LogError(err) +} + +func createTables() { + createArticlesSQL := `CREATE TABLE IF NOT EXISTS articles( + id bigint(20) PRIMARY KEY AUTO_INCREMENT NOT NULL, + title varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, + body longtext COLLATE utf8mb4_unicode_ci +); ` + + _, err := DB.Exec(createArticlesSQL) + logger.LogError(err) +}