【发布时间】:2015-09-25 23:13:39
【问题描述】:
问题是我无法访问相对于实际使用的包路径的文件。让我们考虑这个例子。我有以下结构:
~/go/src/github.com/user/dbms
data/
database.db
dbms.go
~/projects/myproj/bin
main.go
dbms.go:
package dbms
import (
"os"
"fmt"
"path/filepath"
)
type dbms struct {
filepath string
}
func New() *dbms {
return &dbms{filepath: "./data/database.db"}
}
func (d *dbms) Run() {
fmt.Println(filepath.Abs(d.Path))
// output: /home/timur/projects/myproj/bin/data
// I need: /home/timur/go/src/github.com/user/dbms/data
file, err := os.OpenFile(d.filepath, os.O_RDWR, 0666)
// error
}
main.go:
package main
import (
"github.com/user/dbms"
)
func main() {
db := dbms.New()
db.Run()
}
如您所见,dbms.Path 解析相对于入口点的路径,而不是包本身。我哪里错了?
【问题讨论】:
-
@BravadaZadada,嗯...好。以下按预期工作:
pck, err := build.Import("github.com/user/dbms", "", build.FindOnly); fmt.Println(pck.Dir, err)。看起来build.Import(..)有点复杂,仅用于解析包的目录。有没有更简单的方法来做同样的事情?如果这是唯一的方法 - 发布你的答案我接受它。
标签: go relative-path filepath