登录
首页 >  Golang >  Go问答

如何获取导入包的路径

来源:Golang技术栈

时间:2023-04-05 11:03:13 460浏览 收藏

本篇文章给大家分享《如何获取导入包的路径》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

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

这就是我所做的。

项目结构

在此处输入图像描述

lib/lib.go

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)
}

main.go

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

os.Getwd()from的结果lib/lib.go仍然是与 main 相同的路径。我想要的是包的真实路径/Users/novalagung/Documents/go/src/test-import/lib/

我该怎么办?可能吗?

正确答案

如果您可以获取对包中某些内容的引用,则可以使用反射来获取导入路径。

以下是Play上的示例:

package main

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

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

本篇关于《如何获取导入包的路径》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表