创建conf/config.yaml
db:
Database: mysql
Port: 3306
UserName:
Password:
Host: 127.0.0.1
Charset: utf8
创建common/config.go
package common
import (
"github.com/fsnotify/fsnotify"
"github.com/spf13/viper"
"go-server/models"
"log"
)
//映射配置结构体
type Config struct {
DB models.DBConfig
}
var Conf = &Config{}
func InitConfig(configPath string) *Config {
//设置配置文件得格式
viper.SetConfigType("yaml")
viper.SetConfigFile(configPath)
err := viper.ReadInConfig();
if err != nil {
log.Print("配置文件获取异常", err)
}
err = viper.Unmarshal(&Conf)
if err != nil {
log.Print("配置文件获取异常", err)
}
viper.WatchConfig()
viper.OnConfigChange(func(in fsnotify.Event) {
err = viper.Unmarshal(&Conf)
if err != nil {
log.Print("配置文件获取异常", err)
}
})
return Conf
}
创建common/db.go
package common
import (
"fmt"
"go-server/models"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/schema"
"log"
)
var DB *gorm.DB
func InitDB() *gorm.DB {
host := Conf.DB.Host
port := Conf.DB.Port
username := Conf.DB.Username
password := Conf.DB.Password
database := Conf.DB.Database
charset := Conf.DB.Charset
args := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s&parseTime=true",
username,
password,
host,
port,
database,
charset)
db, err := gorm.Open(mysql.Open(args),&gorm.Config{
//解决建表时表名自动带复数,如record变成records
NamingStrategy: schema.NamingStrategy{SingularTable: true},
//打印原生sql日志
//Logger: logger.Default.LogMode(logger.Info),
})
//设置数据库自动创建表字段()
//AutoMigrate自动根据结构体创建表结构,结构体名称即表名
db.Set("gorm:table_options", "CHARSET=utf8").AutoMigrate(&models.Tabledata{})
if err != nil {
log.Print("连接数据库失败" + err.Error())
}
DB = db
return db
}
func GetDB() *gorm.DB {
return DB
}
调用配置初始化数据库
func init() {
//读取yaml中得配置信息
common.InitConfig("conf/config.yaml")
//初始化数据库连接
common.InitDB()
db := common.GetDB()
sqlDB, err := db.DB()
if err != nil {
log.Print("database execption", err)
return
}
//设置空闲连接池中连接得最大数量
sqlDB.SetMaxIdleConns(10)
//设置打开数据库连接的最大数量
sqlDB.SetMaxOpenConns(100)
//设置连接可复用的最大时间
sqlDB.SetConnMaxLifetime(1 * time.Hour)
}
创建routers/router.go
package routers
import (
"github.com/gin-gonic/gin"
"github.com/gin-contrib/cors"
"go-server/api"
"time"
)
func Start() {
e:= gin.Default()
//跨域访问(请求外部资源)
mwCORS := cors.New(cors.Config{
//准许跨域请求网站,多个使用,分开,限制使用
AllowOrigins: []string{"*"},
//允许跨域得远点网站,可以直接retrun true就可以了
AllowOriginFunc: func(origin string) bool {
return true
},
//准许使用得请求方式
AllowMethods: []string{"PUT", "PATCH", "POST", "DELETE", "GET"},
//准许使用的请求头
AllowHeaders: []string{"Origin", "Authorization", "Content-Type"},
//凭证共享,确定共享
AllowCredentials: true,
//显示得请求头
ExposeHeaders: []string{"Content-Type"},
//超时设定
MaxAge: time.Hour * 24,
//AllowWildcard: false,
//AllowBrowserExtensions: false,
//AllowWebSockets: false,
//AllowFiles: false,
//AllowAllOrigins: false,
})
e.Use(mwCORS)
e.POST("/add",api.Add)
e.DELETE("/delete",api.Del)
e.PUT("/update",api.Update)
e.GET("/list",api.ListAll)
e.GET("/listpart",api.ListPart)
e.Run()
}
main.go
func main() {
routers.Start()
}
版权声明:本文为zhaozuoyou原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。