doulu8847 2015-08-23 05:17
浏览 9
已采纳

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

I'm making a package to make API calls to a service.

I have a test package that I use just to test the API calls and test the functions of the main package which I just include the other package into.

In my main package that I'm working on I have

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

Which is ok, but when I call it from my test package e.g.

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

it tells me

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

The problem is, is it is looking for public.pub inside of testfolder instead of github.com/apipackage/ which is where it is.

Just to clarify this mess of words:

The API Package has a function that reads from the same directory

But because I'm including the API package and Testfolder is the CWD when I go run main.go it is instead trying to get it from the testfolder instead even though the main.go doesn't have the function and is just including it.

  • 写回答

1条回答 默认 最新

  • drvfqr5609 2015-08-23 06:34
    关注

    runtime.Caller is what you want I believe.

    Here is a demonstration :

    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
    ", filename, path.Dir(filename))
    }
    

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器