Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to get the directory of the package the file is in, not the current working directory

Tags:

go

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.

like image 297
Datsik Avatar asked Aug 23 '15 05:08

Datsik


1 Answers

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

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

like image 196
HectorJ Avatar answered Sep 20 '22 02:09

HectorJ