创建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{
NamingStrategy: schema.NamingStrategy{SingularTable: true},
})
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() {
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{"*"},
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,
})
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()
}