当前位置: 首页 > 面试题库 >

如何获取文件所在包的目录,而不是当前工作目录

从智志
2023-03-14
问题内容

我正在制作一个程序包以对服务进行API调用。

我有一个测试包,仅用于测试API调用和测试主包的功能,而我只是include将另一个包插入其中。

在我正在工作的主包装中,我有

ioutil.ReadFile(filepath.Abs("Filename.pub"))

没关系,但是当我从测试包中调用它时,例如

/Users/####/gocode/src/github.com/testfolder go run main.go

它告诉我

panic: open /Users/####/gocode/src/github.com/testfolder/public.pub: no such file or directory

问题是,它正在寻找public.pub内部testfolder而不是github.com/apipackage/它所在的位置。

只是为了澄清这些混乱的说法:

API包具有从同一目录读取的功能

但是因为我包括了API包,而在我go run main.go尝试将Testfolder作为CWD时,它却试图从中获取它,testfolder即使main.go不具有该功能,而只是包含了它。


问题答案:

runtime.Caller是我想要的。

这是一个示范:

package main

import (
    "fmt"
    "runtime"
    "path"
)

func main() {
    _, filename, _, ok := runtime.Caller(0)
    if !ok {
        panic("No caller information")
    }
    fmt.Printf("Filename : %q, Dir : %q\n", filename, path.Dir(filename))
}

https://play.golang.org/p/vVa2q-Er6D



 类似资料:
  • 问题内容: 我想使用Java访问我当前的工作目录。 我的代码: 输出: 我的输出不正确,因为C驱动器不是我的当前目录。 如何获得当前目录? 问题答案: 代码: 这将打印从中初始化您的应用程序的当前目录的绝对路径。 说明: 从文档中: 软件包使用当前用户目录解析相对路径名。当前目录表示为系统属性,也就是从其中调用JVM的目录。

  • 问题内容: 我想使用以下命令访问我当前的工作目录 输出: 我的输出不正确,因为C驱动器不是我的当前目录。在这方面需要帮助。 问题答案: 这将从您的应用程序初始化位置打印出完整的绝对路径。

  • 问题内容: 我正在不同位置运行jar文件,并且试图弄清楚如何获取正在运行的jar文件的位置。 问题答案: 这不是一个完美的解决方案,但这将返回类代码库的位置:

  • 问题内容: 在nodejs中,我使用__dirname。在Golang中这等效吗? 我在Google上搜索并找到了这篇文章http://andrewbrookins.com/tech/golang-get-directory-of- the-current-file/ 。他在哪里使用以下代码 但这是在Golang中做正确的方法还是惯用的方法吗? 问题答案: 应该这样做:

  • 问题内容: 这是我的Maven项目结构 现在,当我从IntelliJ运行Module1Class1时,我的当前工作目录是ProjectParent目录,但是当我从Eclipse运行Module1Class1时,我的当前工作目录是ProjectParent / Module1目录。 为什么intellij会有所不同以及如何更改它,所以我的当前目录始终是我的班级开始执行的位置,例如本示例中的“ Mod

  • 在nodejs中,我使用__dirname。在戈兰,这相当于什么? 我在谷歌上找到了这篇文章http://andrewbrookins.com/tech/golang-get-directory-of-the-current-file/.他使用下面的代码 但是,这是正确的方式还是习惯的方式做在戈朗?