在Go中通过WebAssembly(Wasm)与JavaScript交互时,你可以使用syscall/js
包来操作JavaScript对象。要遍历JavaScript对象,你可以使用js.Value
类型提供的方法来获取对象的属性和值。
以下是一个示例,展示了如何在Go Wasm中遍历JavaScript对象:
package main
import (
"syscall/js"
)
func main() {
// 等待JavaScript环境准备好
<-js.Global().Get("document").Call("getElementById", "ready").Get("onload").Invoke().Ready()
// 假设我们有一个JavaScript对象
jsObject := js.Global().Get("exampleObject")
// 遍历JavaScript对象的属性
keys := js.Global().Get("Object").Call("keys", jsObject)
for i := 0; i < keys.Length(); i++ {
key := keys.Index(i).String()
value := jsObject.Get(key)
println("Key:", key, "Value:", value.String())
}
// 保持程序运行
select {}
}
js.Global().Get("exampleObject")
: 获取全局JavaScript对象exampleObject
。js.Global().Get("Object").Call("keys", jsObject)
: 使用JavaScript的Object.keys()
方法获取对象的所有键。keys.Length()
: 获取键的数量。keys.Index(i).String()
: 获取第i
个键的名称。jsObject.Get(key)
: 使用键名获取对应的值。js.Value
类型提供了与JavaScript交互的基本方法,如Get
、Set
、Call
等。Object.keys()
是一个常用的方法,它返回一个包含对象所有可枚举属性的数组。select {}
来保持程序运行)。<!DOCTYPE html>
<html>
<head>
<title>Go Wasm Example</title>
</head>
<body>
<div id="ready"></div>
<script>
// 定义一个JavaScript对象
var exampleObject = {
name: "Alice",
age: 30,
city: "New York"
};
// 触发Go Wasm程序的加载
document.getElementById("ready").onload = function() {};
</script>
<script src="wasm_exec.js"></script>
<script>
const go = new Go();
WebAssembly.instantiateStreaming(fetch("main.wasm"), go.importObject).then((result) => {
go.run(result.instance);
});
</script>
</body>
</html>
在这个示例中,Go Wasm程序会遍历exampleObject
对象的所有属性,并打印出每个键和对应的值。