如果您想捆绑任何类型的文件/目录带有编译代码(像二进制/wasm),有一个很棒的 Golang 库packr。它易于使用,当您将源代码编译为二进制或 webassembly packr 时会加载文件/目录并以与以前相同的方式工作。
我在这里使用main.go在项目的根目录中。和一个存储 json 数据的目录(比如/jsondata/mydata.json)
main.go
package main
import (
"fmt"
"github.com/gobuffalo/packr/v2"
)
func main() {
box := packr.New("myBox", "./jsondata")
s, err := box.FindString("mydata.json")
if err != nil {
fmt.Println("? ~ file: main.go ~ line 14 ~ funcmain ~ err : ", err)
}
fmt.Println(s)
}
/jsondata/mydata.json
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S",
"GlossList": {
"GlossEntry": {
"ID": "SGML",
"SortAs": "SGML",
"GlossTerm": "Standard Generalized Markup Language",
"Acronym": "SGML",
"Abbrev": "ISO 8879:1986",
"GlossDef": {
"para": "A meta-markup language, used to create markup languages such as DocBook.",
"GlossSeeAlso": ["GML", "XML"]
},
"GlossSee": "markup"
}
}
}
}
}
而不是使用go run main.go 运行代码。
如果您将其编译为二进制文件json文件附带二进制代码
go build main.go
如果你把它编译到瓦斯姆,文件夹的行为方式相同
GOOS=js GOARCH=wasm go build -o main.wasm main.go