2 回答

TA貢獻1856條經(jīng)驗 獲得超5個贊
您在這里進行了一些錯誤的假設 - 主要是項目源代碼或目錄結(jié)構(gòu)在運行時以任何方式相關。他們不是。
Go 程序編譯為單個二進制文件,可以在任何地方執(zhí)行,無需源代碼,無需安裝 Go - 只需二進制文件。您需要考慮到項目中任何時候在運行時需要的任何類型的文件:
您需要決定如何定位這些文件:
您可以指定一個路徑,可以是執(zhí)行時相對于 CWD 的路徑,也可以是絕對路徑(但您不應該這樣做)
您可以通過 CLI、環(huán)境變量、配置文件等接受路徑作為運行時參數(shù)。
您可以使用許多可用的軟件包之一將它們嵌入到二進制文件中(說真的 - 如此之多,以至于 Google 搜索
go embed static files
不僅會出現(xiàn)幾個庫,而且會出現(xiàn)幾篇比較各種庫的文章)您需要決定如何打包整個事情:
您可以將任何資源與二進制文件一起壓縮/tar/
您可以將所有資源和二進制文件一起壓縮/壓縮/壓縮
如上所述,您可以將它們作為單個文件嵌入到二進制文件中
對于如何處理這個問題,您必須做出一些選擇,但關鍵的一點是不要假設源代碼中的路徑在運行時完全相關。至少參數(shù)化資源的根路徑,以便您的代碼無論在哪里都能工作,然后您的測試可以傳入適當?shù)穆窂揭杂糜跍y試。

TA貢獻1998條經(jīng)驗 獲得超6個贊
您可以使用os.Getwd()來獲取根工作目錄的路徑。然后,將路徑的其余部分連接到模板目錄。在你的情況下:
wd, err := os.Getwd()
if err != nil {
log.Fatal(err)
}
t, err := template.ParseFiles(wd + "/package1/tmpl/template.tmpl")
- 2 回答
- 0 關注
- 146 瀏覽
添加回答
舉報