Gin框架 -- 常用配置

1. 配置文件配置及加载

1.1 模块下载

go get gopkg.in/ini.v1

1.2 配置文件格式

#数据库类型:mysql/sqlite3
db_type = "mysql"

[mysql]
db_alias = "default"
db_name = "test"
db_user = "root"
db_pwd = "123"
db_host = "127.0.0.1"
db_port = 3306
db_charset = "utf8"


[sqlite3]
db_alias = "default"
db_name = "gin_test.db"

1.3 配置文件加载

func main() {
	r := gin.Default()
 
	// 读取配置文件
	conf, err := ini.Load("./config/my.ini")
	if err != nil {
		log.Fatal("配置文件读取失败, err = ", err)
	}
 
	// 初始化路由路径
	router.InitRouter(r)
 
	// 初始化数据库
	db := models.InitDB(conf)
	defer db.Close()
 
	// 项目的启动端口在这儿设置,也可以从配置文件中读取到这儿
	port := ":" + conf.Section("").Key("httpport").String()
	if err := r.Run(port); err != nil {
		log.Fatal("程序启动失败:", err)
	}
}

2. 静态文件配置

func main() {
	router := gin.Default()
	router.Static("/static", "./static")   // 静态文件配置
	router.StaticFS("/more_static", http.Dir("my_file_system"))
	router.StaticFile("/favicon.ico", "./resources/favicon.ico")
    
	// 监听并在 0.0.0.0:8080 上启动服务
	router.Run(":8080")
}

3. 模板文件配置

func main(){
    // 加载模板文件
	r.LoadHTMLGlob("template/*/*")
}

4. 日志配置

func main(){
    // 记录到文件。
	f, _ := os.Create("gin.log")
	gin.DefaultWriter = io.MultiWriter(f)
}

5. IP白名单

func main(){
    // 设置信任的客户端IP
	r.SetTrustedProxies([]string{"192.168.1.33"})
}

6. 开启DeBug模式

func main(){
    // 开启DeBug模式
	gin.SetMode(gin.DebugMode)
}

7. 配置文件读取运行端口

func main(){
    // 1. 加在配置文件
    conf, err := ini.Load("./config/my.ini")
	if err != nil {
		log.Fatal("配置文件读取失败, err = ", err)
	}
    // 2. 获取项目运行端口
    port := conf.Section("").Key("http_host").String() +":" + conf.Section("").Key("http_port").String()
	if err = r.Run(port); err != nil{
		fmt.Println("服务端启动错误:",err)
	}

}

8. Mysql连接配置

models/initDB.go

package models

import (
	"github.com/gogf/gf/os/gfile"
	"github.com/jinzhu/gorm"
	"gopkg.in/ini.v1"
	"log"
	"os"
	"path"

	// 加载MySQL数据库驱动
	_ "github.com/go-sql-driver/mysql"

	// 加载sqlite3数据库驱动
	//_ "github.com/mattn/go-sqlite3"
)

// 全局db对象
var db *gorm.DB

func InitDB(conf *ini.File) *gorm.DB {
	var err error

	// 数据库类型:mysql/sqlite3
	// db_type = "mysql"
	dbType := conf.Section("").Key("db_type").String()

	// mysql配置信息
	mysqlName := conf.Section("mysql").Key("db_name").String()       // 数据库名称
	mysqlUser := conf.Section("mysql").Key("db_user").String()       // 用户名
	mysqlPwd := conf.Section("mysql").Key("db_pwd").String()         // 密码
	mysqlHost := conf.Section("mysql").Key("db_host").String()       // 数据库ip地址
	mysqlPort := conf.Section("mysql").Key("db_port").String()       // 数据库端口
	mysqlCharset := conf.Section("mysql").Key("db_charset").String() // 指定字符集

	// sqlite3配置信息
	sqliteName := conf.Section("sqlite3").Key("db_name").String()

	var dataSource string
	switch dbType {
	case "mysql":
                // parseTime=true 表示自动解析为时间
		dataSource = mysqlUser + ":" + mysqlPwd + "@tcp(" + mysqlHost + ":" + mysqlPort + ")/" + mysqlName + "?charset=" + mysqlCharset + "&parseTime=true"
		db, err = gorm.Open(dbType,dataSource)
	case "sqlite3":
		dataSource = "database" + string(os.PathSeparator) + sqliteName
		if !gfile.Exists(dataSource){
			os.MkdirAll(path.Dir(dataSource),os.ModePerm)
			os.Create(dataSource)
		}
		db, err = gorm.Open(dbType,dataSource)
	}

	if err != nil{
		db.Close()
		log.Println("数据库加载失败",err)
	}

        // 设置数据库操作显示原生SQL 语句
	Db.LogMode(true)

        // 数据库表动态迁移
	db.AutoMigrate(&auth.User{})

	// 设置数据库连接池空闲连接数
	db.DB().SetConnMaxIdleTime(50)

	// 打开连接
	db.DB().SetMaxOpenConns(100)
        

	// 表明禁用后缀加s
	db.SingularTable(true)

        
	return db
}

main.go

func main(){
    // 初始化数据库
	db := models.InitDB(conf)
	defer db.Close()   
}
posted @ 2021-12-24 10:49  河图s  阅读(851)  评论(0)    收藏  举报