[英]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.