我有一个 Go 程序,它使用一些 json 文件(如 15)作为数据。我想把它编译成一个 WebAssembly 文件。
我该怎么做?
注意:我知道我可以将那些 json 值从我的 JS 代码传递到 WASM,但如果我可以有效地将它们与 WASM 捆绑在一起,我不希望这样做。
编辑:最后我们尝试了 https://pkg.go.dev/embed作为NobbyNobbs提到过,并且运行良好。
最佳答案
如果您想将任何类型的文件/目录 与编译代码(如binary/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"
}
}
}
使用 go run main.go
运行代码。
如果您将其编译为二进制文件,json 文件随二进制代码一起提供
go 构建 main.go
如果您将其编译为 wasm ,该文件夹将以相同的方式运行
GOOS=js GOARCH=wasm go build -o main.wasm main.go
第二种方法(使用“嵌入”)
使用标准库中的embed
库。
这里我使用的是项目根目录下的main.go
。并在同一目录中创建文件(如 /sample.json
)
main.go
package main
import (
"embed"
)
//go:embed sample.json
var f embed.FS
func main(){
data, _ := f.ReadFile("sample.json")
print(string(data))
}
/sample.json
{
"glossary": {
"title": "example glossary",
"GlossDiv": {
"title": "S"
}
}
}
使用 go run main.go
运行代码。
如果您将其编译为二进制文件,json 文件随二进制代码一起提供
go 构建 main.go
如果您将其编译为 wasm ,该文件夹将以相同的方式运行
GOOS=js GOARCH=wasm go build -o main.wasm main.go
关于go - 如何将 Go 及其 Assets 文件捆绑到 WASM 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74113979/