簡體   English   中英

供應 go 模塊和 git 子模塊

[英]Vendoring go module with git submodule

目的是使 go 模塊與 static 文件的存儲庫同步。


internal
- parser.go
- static-file-repository/


其中“parser.go”解析存儲庫中的 static 文件,該文件作為 git 子模塊添加。

以前,我找到了一種解決方法,用於使用 static 文件銷售 go模塊。 添加 go 文件時,go 模塊供應商整個 package。

但是,當添加為 git 子模塊時,go 模塊似乎不包括static-file-repository

另一個注意事項,當我對這個存儲庫的本地路徑使用替換指令時,它可以被其他包正確使用

進一步說明情況:

parser.go將文件嵌入到static-file-repository中並充當Getter 然后,如果另一個模塊想要訪問那些 static 文件,它只需調用 function 就像GetStaticFiles()

問題是,go embed 說

pattern static-file-repository no matching files found

我確信嵌入的路徑、命名、使用等,因為我們在整個項目的多個地方都使用它

編輯 3:

問題不在於我如何嵌入文件,我知道因為正如我所說,用本地版本替換模塊工作正常。 問題是 go 模塊不供應 git 子模塊。 當我使用本地替換時,我可以在external libraries中看到靜態文件存儲庫,並且一切正常。 但是,當使用相同的代碼時,在 go 模塊上,該存儲庫消失了

看來您可以通過使用 Go 1.16 embed功能來實現您想要的。

parser.go (或 static 文件目錄/子模塊同一級別的另一個文件)中添加一個變量,該變量嵌入以下內容:

package internal

import "embed"

//go:embed static-file-repository
var StaticFiles embed.FS

請注意, go:embed指令中的此目錄模式不會嵌入名稱以. _ 嵌入為static-file-repository/*如果你也想要這些。

然后此模塊中的其他包將能夠從中訪問文件:

f, err := internal.StaticFiles.Open("static-file-repository/foo/bar/stuff.png")

考慮一下,如果您在internal package 中聲明嵌入資產,即使名稱已導出,它也不會在其自己的模塊之外可用。 因此,要實際供應 static 文件,您可能想要重命名內部 package,或者在訪問它的非內部 package 中公開函數:

package static

import "mymodule/internal"

func Get(filename string) (fs.File, error) {
    return internal.StaticFiles.Open("static-file-repository/"+filename)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM