You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从.env文件获取Goose迁移的数据库连接字符串?

从.env文件获取Goose数据库连接字符串的方法

方法一:通过Shell直接读取.env(无需额外Go代码)

假设你的.env文件格式如下:

DB_USER=your_user
DB_PASSWORD=your_pass
DB_HOST=localhost
DB_PORT=3306
DB_NAME=your_db

方式1:使用dotenv工具加载环境变量

  1. 安装Go版的dotenv工具:
    go install github.com/joho/godotenv/cmd/godotenv@latest
    
  2. 加载.env并执行迁移命令:
    godotenv -f .env goose -dir <migration-directory> mysql "$DB_USER:$DB_PASSWORD@tcp($DB_HOST:$DB_PORT)/$DB_NAME" up
    

方式2:纯Shell解析(无需额外工具)

直接通过Shell命令提取.env变量并拼接连接字符串:

goose -dir <migration-directory> mysql "$(grep DB_USER .env | cut -d '=' -f2):$(grep DB_PASSWORD .env | cut -d '=' -f2)@tcp($(grep DB_HOST .env | cut -d '=' -f2):$(grep DB_PORT .env | cut -d '=' -f2))/$(grep DB_NAME .env | cut -d '=' -f2)" up

注意:若.env包含空格或特殊字符,此方法需调整,推荐使用dotenv工具更可靠。

方法二:编写Go脚本调用Goose API(适合Go项目集成)

通过Go代码读取.env并调用Goose的迁移逻辑,完全在项目代码中控制流程:

  1. 安装依赖:
    go get github.com/pressly/goose/v3
    go get github.com/joho/godotenv
    
  2. 创建migrate.go文件:
    package main
    
    import (
        "log"
        "os"
    
        "github.com/joho/godotenv"
        "github.com/pressly/goose/v3"
        _ "github.com/go-sql-driver/mysql" // 导入MySQL驱动
    )
    
    func main() {
        // 加载.env文件
        if err := godotenv.Load(); err != nil {
            log.Fatalf("加载.env失败: %v", err)
        }
    
        // 从环境变量提取数据库配置
        connStr := os.Getenv("DB_USER") + ":" + os.Getenv("DB_PASSWORD") +
            "@tcp(" + os.Getenv("DB_HOST") + ":" + os.Getenv("DB_PORT") + ")/" +
            os.Getenv("DB_NAME")
    
        // 打开数据库连接
        db, err := goose.OpenDBWithDriver("mysql", connStr)
        if err != nil {
            log.Fatalf("连接数据库失败: %v", err)
        }
        defer db.Close()
    
        // 执行迁移(替换为你的迁移目录路径)
        if err := goose.Run("up", db, "./migrations"); err != nil {
            log.Fatalf("迁移执行失败: %v", err)
        }
    
        log.Println("数据库迁移完成")
    }
    
  3. 执行脚本:
    go run migrate.go
    

方法三:使用Goose配置文件(v3+版本支持)

Goose v3及以上支持通过配置文件引用环境变量,步骤如下:

  1. 创建goose.yml配置文件:
    migrations:
      dir: ./migrations  # 替换为你的迁移目录
      table: goose_db_version
    database:
      driver: mysql
      dsn: "${DB_USER}:${DB_PASSWORD}@tcp(${DB_HOST}:${DB_PORT})/${DB_NAME}"
    
  2. 加载.env并执行迁移:
    godotenv -f .env goose up
    

内容的提问来源于stack exchange,提问作者medilies

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 10:05:05