环境配置
.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_MODE | Gin 模式 (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 | 数据中心 ID | 0-7 |
SNOWFLAKE_NODE_ID | 节点 ID | 0-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配置优先级(从高到低):
- 显式调用
Set() - 环境变量
- 配置文件
- 默认值
多环境配置
开发环境 (.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)
}
}