2 回答
TA貢獻1856條經驗 獲得超5個贊
您在這里進行了一些錯誤的假設 - 主要是項目源代碼或目錄結構在運行時以任何方式相關。他們不是。
Go 程序編譯為單個二進制文件,可以在任何地方執行,無需源代碼,無需安裝 Go - 只需二進制文件。您需要考慮到項目中任何時候在運行時需要的任何類型的文件:
您需要決定如何定位這些文件:
您可以指定一個路徑,可以是執行時相對于 CWD 的路徑,也可以是絕對路徑(但您不應該這樣做)
您可以通過 CLI、環境變量、配置文件等接受路徑作為運行時參數。
您可以使用許多可用的軟件包之一將它們嵌入到二進制文件中(說真的 - 如此之多,以至于 Google 搜索
go embed static files不僅會出現幾個庫,而且會出現幾篇比較各種庫的文章)您需要決定如何打包整個事情:
您可以將任何資源與二進制文件一起壓縮/tar/
您可以將所有資源和二進制文件一起壓縮/壓縮/壓縮
如上所述,您可以將它們作為單個文件嵌入到二進制文件中
對于如何處理這個問題,您必須做出一些選擇,但關鍵的一點是不要假設源代碼中的路徑在運行時完全相關。至少參數化資源的根路徑,以便您的代碼無論在哪里都能工作,然后您的測試可以傳入適當的路徑以用于測試。
TA貢獻1998條經驗 獲得超6個贊
您可以使用os.Getwd()來獲取根工作目錄的路徑。然后,將路徑的其余部分連接到模板目錄。在你的情況下:
wd, err := os.Getwd()
if err != nil {
log.Fatal(err)
}
t, err := template.ParseFiles(wd + "/package1/tmpl/template.tmpl")
- 2 回答
- 0 關注
- 169 瀏覽
添加回答
舉報
