从0开始搭建GoWeb脚手架

基本框架

Web框架:Gin
数据库:Mysql
配置中心&注册中心:Nacos && 本地配置文件
配置文件读取和监听:viper
env配置:env v6

配置类

MySQL

import (
    "fmt"
)

// MySQL配置
type mysqlConfig struct {
    Host     string `mapstructure:"host" yaml:"host"`         // 主机
    Port     int    `mapstructure:"port" yaml:"port"`         // 端口
    User     string `mapstructure:"user" yaml:"user"`         // 用户名
    Password string `mapstructure:"password" yaml:"password"` // 密码
    Db       string `mapstructure:"db" yaml:"db"`             // 数据库名称
}

// GetDSN 返回 MySQL 连接字符串
func (c mysqlConfig) GetDSN() string {
    return fmt.Sprintf("%s:%s@tcp(%s:%v)/%s?charset=utf8mb4&parseTime=True&loc=Local",
        c.User, c.Password, c.Host, c.Port, c.Db)
}

Redis

import "fmt"

// Redis配置
type redisConfig struct {
    Host     string `mapstructure:"host" yaml:"host"`         // 主机
    Port     int    `mapstructure:"port" yaml:"port"`         // 端口
    Password string `mapstructure:"password" yaml:"password"` // 密码
    Db       int    `mapstructure:"db" yaml:"db"`             // 数据库名称
}

func (r redisConfig) GetDSN() string {
    return fmt.Sprintf("%s:%v", r.Host, r.Port)
}

Nacos

// Nacos配置
type nacosConfig struct {
    Host             string `env:"NACOS_HOST"`                               // 主机
    Port             uint64 `env:"NACOS_PORT" envDefault:"8848"`             // 端口
    NamespaceId      string `env:"NACOS_NAMESPACE"`                          // 命名空间
    CenterConfigName string `env:"NACOS_CONFIG_NAME" envDefault:"gtest.yml"` // 外部配置文件名,多个以逗号隔开
}

配置信息

var Scd systemConfigData
var Nacos nacosConfig

// 配置信息
type systemConfigData struct {
    Admin appInfo     `mapstructure:"admin" yaml:"admin"` // 系统配置-Admin
    Api   appInfo     `mapstructure:"api" yaml:"api"`     // 系统配置-Api
    MySQL mysqlConfig `mapstructure:"mysql" yaml:"mysql"` // MySQL配置
    Redis redisConfig `mapstructure:"redis" yaml:"redis"` // Redis配置
}

以下是可选项

// 应用配置
type appInfo struct {
    AppName string `mapstructure:"name" yaml:"name"`       // 应用名称
    Port    uint64 `mapstructure:"port" yaml:"port"`       // 端口号
    Prefix  string `mapstructure:"prefix" yaml:"prefix"`   // 接口前缀
    Version string `mapstructure:"version" yaml:"version"` // 版本号
    Monster bool   `mapstructure:"monster" yaml:"monster"` // 妖怪模式
}

数据库连接

MySQL

package client

import (
    "GoWeb-template/config"

    "github.com/Echo7659/elog"
    "gorm.io/driver/mysql"
    "gorm.io/gorm"
)

var MySQL *gorm.DB

func InitMySQLClient() {
    // 创建连接对象
    mysqlConfig := mysql.Config{
        DSN:                     config.Scd.MySQL.GetDSN(),
        DontSupportRenameIndex:  true, // 重命名索引时采用删除并新建的方式
        DontSupportRenameColumn: true, // 用 `change` 重命名列
    }
    conn, err := gorm.Open(mysql.New(mysqlConfig), &gorm.Config{Logger: elog.DefaultGormLogger()})
    if err != nil {
        elog.Say.Panic("初始化MySQL连接失败, 错误信息: %v", err)
    } else {
        elog.Say.Debug("MySQL连接成功")
    }
    MySQL = conn

    //db, err := conn.DB()
    //db.SetMaxIdleConns(10)           // 用于设置连接池中空闲连接的最大数量
    //db.SetMaxOpenConns(100)          // 用于设置数据库连接的最大打开数量
    //db.SetConnMaxLifetime(time.Hour) // 设置连接的最大存活时间
}

Redis

package client

import (
    "GoWeb-template/config"
    "context"
    "github.com/Echo7659/elog"
    "github.com/go-redis/redis/v8"
)

var Redis *redis.Client

func InitRedisClient() {
    conf := config.Scd.Redis
    // 初始化连接
    conn := redis.NewClient(&redis.Options{
        Addr:     conf.GetDSN(),
        Password: conf.Password,
        DB:       conf.Db,
    })
    if err := conn.Ping(context.Background()).Err(); err != nil {
        elog.Say.Panicf("Redis连接初始化失败: %v", err)
    } else {
        elog.Say.Debug("Redis连接初始化成功")
    }
    Redis = conn
}

剩下的部分晚点更新

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇