2 回答
TA贡献1995条经验 获得超2个赞
路径相对于运行时执行代码的目录。文件包含在与包相同的目录中这一事实并不意味着它与之相关联。它不会与包一起编译。
您必须/path/to/static/file.txt通过命令行参数(使用flags模块)或环境变量将绝对路径传递给文件。
使用标志
在模块 A
package A
import (
"flag"
"os"
)
func init() {
var filePath = flag.String("filePath", "DEFAULT_PATH", "help message for flagname")
file, err := os.Open(*filePath)
}
在命令行中运行
注意: main.go 导入包 A
go run main.go -filePath=/path/to/file.txt
在init()函数中使用标志会很快变得棘手,因此您可以(我强烈建议您)使用环境变量。
对于基于 Linux 的系统,添加路径中包含export FILE_PATH=/path/to/file的.profileor.bashrc文件。$HOME也运行source .profile或source .basrc取决于编辑哪个文件以立即进行更改。
然后您可以将包 A更新为如下所示:
package A
import (
"os"
)
func init() {
file, err := os.Open(os.Getenv("FILE_PATH"))
}
TA贡献2016条经验 获得超9个赞
如果你要忽略运行时的路径,你可以试试 runtime.Caller(0) (不推荐,完整的文件路径可能比这个解决方案更好)
在 a.go 里面
_, f, _, _ := runtime.Caller(0)
dirPath := filepath.Dir(file)
file, err := os.Open(filepath.Join(dirPath, "static", "file.txt"))
- 2 回答
- 0 关注
- 149 浏览
添加回答
举报