gpt4 book ai didi

go - revel中如何获取当前文件的位置

转载 作者:数据小太阳 更新时间:2023-10-29 03:15:50 26 4
gpt4 key购买 nike

我正在使用 golang revel web 框架并且我正在尝试在当前工作目录中创建一个 sqlite 数据库。

model.go

func New(dbName string,table string) *Db {
_,filename,_,_ := runtime.Caller(1)
db , err := sql.Open("sqlite3",path.Join(path.Dir(filename),dbName))
if err != nil {
log.Fatal(err)
}

err = db.Ping()

if err != nil {
log.Panic(err)
}

database := &Db{Database:db}
_,err = db.Exec("create table %s" +
"( id integer primary key, " +
"name varchar(100),"+
"email varchar(100),"+
"branch varchar(100),"+
"help varchar(100)",)

if err != nil {
log.Fatal(err)
}

我有一个只调用此函数的测试。

每当我使用 revel test 或通过转到 localhost:9000/@tests 运行测试时,函数 Panics 和错误消息是无法打开数据库文件

发生这种情况的原因是 runtime.Caller(1) 返回的 filename/usr/local/go/src/runtime/asm_amd64 .s 程序没有权限。

如果我直接写./foo.db,即使那样也会显示错误。

我尝试了返回空字符串的 os.Getwd()

我也试过 filepath.Abs​​(filepath.Dir(os.Args[0]))但这返回了 /home/girish/GoProjects/bin/revel.d,这是 revel 二进制文件。

那么找到 model.go 目录的最佳方法是什么?

最佳答案

在运行时获取 model.go 文件的目录没有意义,因为编译后的可执行文件可能位于完全不同的文件系统上。

您可能想要获取正在运行的可执行文件的启动目录:

dir, err := filepath.Abs(filepath.Dir(os.Args[0]))

dir 将是程序在运行时所在的文件夹。

关于go - revel中如何获取当前文件的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36238206/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com