竹简文档

环境配置

.env 配置文件与环境变量管理

环境配置

Bamboo Base 使用 .env 文件管理环境配置,通过 Viper 库读取配置。

.env 配置文件

在项目根目录创建 .env 文件:

# ============================================
# 服务配置
# ============================================
SERVER_PORT=8080
SERVER_MODE=debug
SERVER_READ_TIMEOUT=60
SERVER_WRITE_TIMEOUT=60

# ============================================
# 日志配置
# ============================================
LOG_LEVEL=info
LOG_PATH=./logs
LOG_CONSOLE=true
LOG_FILE=true

# ============================================
# 雪花算法配置
# ============================================
SNOWFLAKE_DATACENTER_ID=1
SNOWFLAKE_NODE_ID=1

# ============================================
# 数据库配置
# ============================================
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=password
DB_NAME=bamboo
DB_MAX_OPEN=100
DB_MAX_IDLE=10

# ============================================
# Redis 配置
# ============================================
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=
REDIS_DB=0

# ============================================
# 调试模式
# ============================================
DEBUG=true

配置项说明

服务配置

配置项说明默认值
SERVER_PORT服务端口8080
SERVER_MODEGin 模式 (debug/release/test)debug
SERVER_READ_TIMEOUT读取超时(秒)60
SERVER_WRITE_TIMEOUT写入超时(秒)60

日志配置

配置项说明默认值
LOG_LEVEL日志级别 (debug/info/warn/error)info
LOG_PATH日志文件路径./logs
LOG_CONSOLE是否输出到控制台true
LOG_FILE是否输出到文件true

雪花算法配置

配置项说明范围
SNOWFLAKE_DATACENTER_ID数据中心 ID0-7
SNOWFLAKE_NODE_ID节点 ID0-7

数据库配置

配置项说明默认值
DB_HOST数据库主机localhost
DB_PORT数据库端口3306
DB_USER数据库用户root
DB_PASSWORD数据库密码-
DB_NAME数据库名称-
DB_MAX_OPEN最大连接数100
DB_MAX_IDLE最大空闲连接10

读取配置

基本读取

import "github.com/bamboo-services/bamboo-base-go/web"

// 字符串
port := web.Register.Config.GetString("SERVER_PORT")

// 整数
timeout := web.Register.Config.GetInt("SERVER_READ_TIMEOUT")

// 布尔值
debug := web.Register.Config.GetBool("DEBUG")

// 浮点数
ratio := web.Register.Config.GetFloat64("CACHE_RATIO")

带默认值

// 如果配置不存在,使用默认值
port := web.Register.Config.GetString("SERVER_PORT")
if port == "" {
    port = "8080"
}

读取结构体

type DBConfig struct {
    Host     string
    Port     int
    User     string
    Password string
    Name     string
}

func GetDBConfig() *DBConfig {
    return &DBConfig{
        Host:     web.Register.Config.GetString("DB_HOST"),
        Port:     web.Register.Config.GetInt("DB_PORT"),
        User:     web.Register.Config.GetString("DB_USER"),
        Password: web.Register.Config.GetString("DB_PASSWORD"),
        Name:     web.Register.Config.GetString("DB_NAME"),
    }
}

环境变量覆盖

Viper 支持环境变量覆盖 .env 文件中的配置:

# 临时覆盖端口
SERVER_PORT=9090 go run main.go

配置优先级(从高到低):

  1. 显式调用 Set()
  2. 环境变量
  3. 配置文件
  4. 默认值

多环境配置

开发环境 (.env.development)

SERVER_PORT=8080
SERVER_MODE=debug
LOG_LEVEL=debug
DEBUG=true

生产环境 (.env.production)

SERVER_PORT=80
SERVER_MODE=release
LOG_LEVEL=warn
DEBUG=false

根据环境加载

func ConfigInit() {
    env := os.Getenv("APP_ENV")
    if env == "" {
        env = "development"
    }

    configFile := fmt.Sprintf(".env.%s", env)

    web.Register.Config = viper.New()
    web.Register.Config.SetConfigFile(configFile)

    if err := web.Register.Config.ReadInConfig(); err != nil {
        // 回退到默认配置
        web.Register.Config.SetConfigFile(".env")
        web.Register.Config.ReadInConfig()
    }
}

调试模式

func main() {
    web.InitRegister()
    web.Register.ConfigInit()

    // 检查调试模式
    if web.Register.Config.GetBool("DEBUG") {
        gin.SetMode(gin.DebugMode)
        web.Register.Logger.Info("running in debug mode")
    } else {
        gin.SetMode(gin.ReleaseMode)
    }
}

下一步

On this page