第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Go 中處理包中支持文件的路徑?

如何在 Go 中處理包中支持文件的路徑?

Go
慕村9548890 2023-07-10 10:11:16
Go 程序具有以下結(jié)構(gòu):-├── app.go├── bin│   └── run.go├── config│   └── Config.go└── package1    ├── package1_file.go    └── tmpl        └── template.tmpl現(xiàn)在,在 中package1_file.go,我通過相對路徑訪問了 template.tmpl,例如:t, err := template.ParseFiles("./tmpl/template.tmpl")當我運行測試時,測試能夠成功運行,因為我的猜測是,Go 在運行包測試時更改了當前工作目錄。go tests -v ./...但是,當我(go build -o app && ./app)從根文件夾運行該程序時,出現(xiàn)錯誤,抱怨該文件不存在。Error compiling template: open ./tmpl/template.tmpl: no such file or directory當我將路徑更改為 時它開始工作package2/tmpl/template.tmpl。外部的代碼package2與此模板文件無關,因此我不想在公開package2. 我有什么選擇?定位此類支持文件的正確方法是什么?
查看完整描述

2 回答

?
RISEBY

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試。


查看完整回答
反對 回復 2023-07-10
?
米琪卡哇伊

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")


查看完整回答
反對 回復 2023-07-10
  • 2 回答
  • 0 關注
  • 146 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號