打開文件時出現在源文件$ PWD/DIR/src.go我用在同一目錄下。去源文件中去
os.Open("myfile.txt")
它看起來的myfile.txt在$ PWD(這看起來很正常)。
是否有辦法告訴Go在與src.go相同的目錄中查找myfile.txt?我需要在Ruby中使用類似__FILE__
的東西。
打開文件時出現在源文件$ PWD/DIR/src.go我用在同一目錄下。去源文件中去
os.Open("myfile.txt")
它看起來的myfile.txt在$ PWD(這看起來很正常)。
是否有辦法告訴Go在與src.go相同的目錄中查找myfile.txt?我需要在Ruby中使用類似__FILE__
的東西。
Go不是一種解釋型語言,因此在與源文件相同的位置查找文件沒有任何意義。 go二進制文件被編譯,並且源文件不需要存在,二進制文件就可以運行。因爲Go沒有與FILE等效。 runtime.Caller函數在編譯二進制文件時返回文件名。
我想也許如果我們明白爲什麼你真的想要這個功能,我們可以更好地爲你提供建議。
使用包osext
它提供的功能ExecutableFolder()
返回的絕對路徑文件夾中當前運行程序的可執行駐留(用於cron作業有用)。它是跨平臺的。
package main
import (
"github.com/kardianos/osext"
"fmt"
"log"
)
func main() {
folderPath, err := osext.ExecutableFolder()
if err != nil {
log.Fatal(err)
}
fmt.Println(folderPath)
}
你也可以得到充分的可執行文件的路徑(類似於__FILE__
):
package main
import (
"github.com/kardianos/osext"
"fmt"
)
func main() {
exeAbsolutePath, _ := osext.Executable()
fmt.Println(exeAbsolutePath)
}
好的答案......實際上,我的Go程序需要從外部文件加載數據,並且我想確保它能夠找到它們,而不必設置這些文件的絕對路徑。 – Blacksad 2012-04-08 01:17:37
也許你只是想爲你的應用程序設置一個約定,並讓它加載相對於它運行的文件。或使用標誌包,並告訴它在命令行上的文件的位置。 – 2012-04-08 01:35:40
是的,你是對的。謝謝 ! – Blacksad 2012-04-08 01:53:35