2015-08-23 6 views
6

Ich mache ein Paket, um API-Aufrufe an einen Dienst zu machen.Golang, wie man das Verzeichnis des Pakets, in dem sich die Datei befindet, und nicht das aktuelle Arbeitsverzeichnis erhält

Ich habe ein Testpaket, das ich nur zum Testen der API-Aufrufe verwenden und testen Sie die Funktionen des Hauptpakets, das ich nur include das andere Paket in.

In meinem Haupt-Paket, das ich arbeite ich

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

haben, die in Ordnung ist, aber wenn ich es von meinem Testpaket nennen z.B.

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

es sagt mir

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

Das Problem ist, ist es sucht public.pub innerhalb von testfolder statt github.com/apipackage/ das ist, wo es ist.

Gerade dieses Durcheinander von Worten zu klären:

Das API-Paket hat eine Funktion, die

aus dem gleichen Verzeichnis liest Aber weil ich das API-Paket bin auch und Testfolder sind die CWD, wenn ich es go run main.go versucht stattdessen, es von der testfolder stattdessen zu bekommen, obwohl die main.go nicht die Funktion hat und es gerade einschließt.

Dank sorry für die verwirrende ass Frage

Antwort

15

runtime.Caller ist, was Sie wollen, glaube ich. Hier

ist eine 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

Verwandte Themen