2016-04-25 8 views
1

Ich versuche, einen relativen Pfad Gebäude in Go zu verstehen. Hier ist mein Problem: Ich habe einen Verzeichnisbaum:Relative Pfad in Go

-root 
--main 
---utils 
---certs 
--tests 

Nachdem meine Zertifikate in Zertifikate hochgeladen Ordner und Konnektivität util.go Datei hochgeladen in utils, ich habe relative Pfade hart in der Datei kodiert.

Problem: Mit Pfaden in utils/util.go angegeben, funktionieren sie gut einmal aufgerufen von main/main.go und werfen Ausnahme (Datei nicht gefunden), wenn von tests/test.go aufgerufen.

Was ist der Ausweg?

+3

Mögliches Duplikat [wie eine relative Datei von Code und Tests referenzieren] (http://stackoverflow.com/questions/31059023/how-to-reference-a-relative-file-from-code-and-tests) – icza

+0

Nein, es sieht nicht doppelt aus. Es topicstarter einige revel Framework verwendet, wenn für mich für die Basis-Funktionalität golang versagt ... – ArkadyB

+0

Bitte lesen Sie die [Antwort, die ich dort gab] (http://stackoverflow.com/a/31059125/1705598) und blockiert werden nicht durch das Wort "schwelgen". – icza

Antwort

1

Verwenden Sie das go/build Paket den absoluten Pfad eines Pakets in einem Go-Arbeitsbereich zu finden:

importPath := "github.com/user/root/main" // modify to match import path of main 
p, err := build.Default.Import(importPath, "", build.FindOnly) 
if err != nil { 
    // handle error 
} 
certsDir := filepath.Join(p.Dir, "certs") 

Dies funktioniert nur, wenn sie im Rahmen eines Go-Arbeitsbereich (der Quellcode ausgeführt ist verfügbar und GOPATH gesetzt).