Go语言Lambda函数无法访问config.json文件问题求助
Go Lambda函数部署后找不到config.json的解决方法
问题根源
本地运行时,main.go和config.json处于同一目录,相对路径能正常定位文件;但部署到Lambda后,编译后的二进制文件被放置在/var/task目录,若config.json未被正确打包到对应位置,或代码路径逻辑依赖不可靠的工作目录,就会出现文件找不到的错误。
解决方案
1. 确保config.json被纳入部署包
GitHub Actions部署时,必须将config.json和编译后的二进制文件打包到同一层级。示例打包流程:
# 编译Go代码,生成名为main的二进制文件 go build -o main ./subfolder/subfolder/ # 把config.json复制到二进制文件所在目录 cp ./subfolder/subfolder/config.json . # 将二进制和配置文件一起打包成部署用zip zip deployment.zip main config.json
这样部署后,/var/task目录下会同时存在main和config.json,代码中用os.Open("config.json")即可正常读取。
2. 修正代码路径逻辑(推荐)
不要依赖os.Getwd()获取路径(Lambda的工作目录不可控),改用代码文件的实际位置来定位config.json:
import ( "path/filepath" "runtime" "os" ) func getConfigPath() string { _, filename, _, ok := runtime.Caller(0) if !ok { panic("无法获取当前文件路径") } // 获取当前代码文件所在目录 dir := filepath.Dir(filename) // 拼接config.json的绝对路径 return filepath.Join(dir, "config.json") } // 读取配置文件时调用 configFile, err := os.Open(getConfigPath())
这种方式基于代码文件的位置定位配置文件,只要config.json和代码文件同目录打包,无论部署环境如何变化都能找到。
3. 检查GitHub Actions部署配置
确认部署步骤中的打包命令包含了config.json,避免只打包二进制文件遗漏配置文件。
内容的提问来源于stack exchange,提问作者Swathi
相关产品推荐
相关产品推荐

