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

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

如何訪問通過 Bazel go_binary 運(yùn)行的 Go 應(yīng)用程序內(nèi)部的數(shù)據(jù)文件

如何訪問通過 Bazel go_binary 運(yùn)行的 Go 應(yīng)用程序內(nèi)部的數(shù)據(jù)文件

Go
慕神8447489 2022-10-24 09:22:09
我有一個(gè)包含 go_binary 目標(biāo)的 BUILD.bazel 文件。在此應(yīng)用程序中,我需要訪問位于同一目錄中的 YAML 文件(例如 config.yml)。go_binary 看起來像這樣:go_binary(    name = "app1",    data = ["config.yml"],    embed = [":app1_lib"],    visibility = ["//visibility:public"],)我可以看到文件已添加到/private/var/tmp/_bazel/52b44015c7f2ec78df04b9a822df93c1/execroot/__main__/bazel-out/darwin-fastbuild/bin/services/app1/app1_/app1.runfiles/__main__/services/app1文件夾中。在我的 Go 應(yīng)用程序中訪問此文件的最佳方式是什么?到目前為止,我發(fā)現(xiàn)我可以做到url := fmt.Sprintf("%s/services/app1/config.yml", os.Getenv("PWD"))...但我想避免必須明確指定文件夾結(jié)構(gòu)。
查看完整描述

1 回答

?
慕少森

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊

這就是您在 Bazel 中訪問數(shù)據(jù)文件的簡單方式……您從 WORKSPACE 根目錄指定文件的完整路徑。如果您的文件有目標(biāo)//services/app1:config.yml,那么路徑就是serivces/app1/config.yml.


$PWD除非出于某種原因需要絕對路徑,否則無需添加前綴。這樣做的首選方法是:


const config = "services/app1/config.yml"

abs, err := filepath.Abs(config)

if err != nil {

    return err

}

這假設(shè)您沒有調(diào)用 chdir... 我避免在我的程序中調(diào)用 chdir,主要是因?yàn)檫@個(gè)原因。


請注意,它不是 URL,如果您需要 URL,您可以:


u := url.URL{Scheme: "file", Path: filepath.ToSlash(abs)}

另請注意,如果您正在處理多個(gè)存儲庫中的文件,則必須包含存儲庫,前綴為"external". 例如,@some-repo//dir/pkg:targetis external/some-repo-dir/pkg/target... 即使它只是":target"在您的 BUILD 文件中。呃,對吧?


為什么巴澤爾會這樣做?

您的代碼可能會將來自您工作區(qū)的所有包鏈接在一起??雌饋砗苊黠@,在您的情況下,您只是希望能夠config.yml從與包相同的目錄中讀取,但您同樣可以傳遞data = ["config.yml"]給.go_library()deps


為了讓它在任何地方都能正常工作,每個(gè)人都需要使用數(shù)據(jù)文件的完整路徑。這有點(diǎn)冗長,但是哦。


如果您僅調(diào)用go_binaryfrom agenrule或 build 規(guī)則而不是bazel run,則可以根據(jù)需要將配置文件的路徑作為命令行參數(shù)傳遞。這將允許您在沒有完整路徑的情況下指定它。


查看完整回答
反對 回復(fù) 2022-10-24
  • 1 回答
  • 0 關(guān)注
  • 140 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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