Pertanyaan Golang bagaimana mendapatkan direktori paket file tersebut, bukan direktori kerja saat ini


Saya sedang membuat paket untuk membuat panggilan API ke layanan.

Saya memiliki paket tes yang saya gunakan hanya untuk menguji panggilan API dan menguji fungsi paket utama yang saya baru saja include paket lain ke dalam.

Dalam paket utama saya yang saya kerjakan saya miliki

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

Tidak apa-apa, tetapi ketika saya menyebutnya dari paket uji saya, mis.

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

itu memberitahu saya

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

Masalahnya adalah, apakah itu mencari public.pub di dalam testfolder dari pada github.com/apipackage/ yang mana itu.

Hanya untuk memperjelas kekacauan kata-kata ini:

Paket API memiliki fungsi yang terbaca dari direktori yang sama

Tetapi karena saya termasuk paket API dan Testfolder adalah CWD ketika saya go run main.go alih-alih mencoba mendapatkannya dari testfolder alih-alih meskipun main.go tidak memiliki fungsi dan hanya memasukkannya.

Terima kasih atas pertanyaan yang membingungkan


7
2017-08-23 05:17


asal


Jawaban:


runtime.Caller adalah apa yang Anda inginkan, saya percaya.

Berikut ini adalah demonstrasi:

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


15
2017-08-23 06:34