Go 如何获取导入包的路径

Go 如何获取导入包的路径,go,path,Go,Path,我在尝试获取导入包的路径时遇到困难。当我在导入的包中打印os.Getwd()的结果时,它会显示与mainpackage相同的路径 这就是我所做的 项目结构 lib/lib.go 梅因,加油 结果 来自lib/lib.go的os.Getwd()。我想要的是包的实际路径,即/Users/novalagung/Documents/go/src/test import/lib/ 我该怎么办?有可能吗?如果可以获取对包中某些内容的引用,则可以使用reflect获取导入路径 以下是一个关于: PkgPat

我在尝试获取导入包的路径时遇到困难。当我在导入的包中打印
os.Getwd()
的结果时,它会显示与
main
package相同的路径

这就是我所做的

项目结构

lib/lib.go 梅因,加油 结果 来自
lib/lib.go
os.Getwd()。我想要的是包的实际路径,即
/Users/novalagung/Documents/go/src/test import/lib/


我该怎么办?有可能吗?

如果可以获取对包中某些内容的引用,则可以使用reflect获取导入路径

以下是一个关于:

PkgPath()
只能检索非指针的包路径

//如果类型是预先声明的(字符串,错误)或未定义(*T,struct{},
//[]int或A(其中A是未定义类型的别名),包路径
//将是空字符串。
func packageName(v接口{})字符串{
如果v==nil{
返回“”
}
val:=反射值(v)
如果val.Kind()==reflect.Ptr{
返回值.Elem().Type().PkgPath()
}
返回值.Type().PkgPath()
}

os.Getwd
在运行时返回与当前目录对应的根路径名。它与只在编译时工作的源路径无关。也许告诉我们你需要解决什么问题。请看。@jiangid“也许告诉我们你需要解决什么问题”,基本上我创建了一些应用程序,其中包含子应用程序,每个子应用程序之间有不同的包。如果我能得到子文件夹的名称,这将使我更容易维护routes@JiangYD没关系,大卫回答我的问题
package lib

import "os"
import "fmt"

func init() {
    dir, _ := os.Getwd()
    fmt.Println("lib.init() :", dir)
}

func GetPath() {
    dir, _ := os.Getwd()
    fmt.Println("lib.GetPath() :", dir)
}
package main

import "os"
import "fmt"
import "test-import/lib"

func main() {
    dir, _ := os.Getwd()
    fmt.Println("main :", dir)
    lib.GetPath()
}
lib.init() : /Users/novalagung/Documents/go/src/test-import
main : /Users/novalagung/Documents/go/src/test-import
lib.GetPath() : /Users/novalagung/Documents/go/src/test-import
package main

import (
    "bytes"
    "fmt"
    "reflect"
)

func main() {
    var b bytes.Buffer
    fmt.Println(reflect.TypeOf(b).PkgPath())
}