您现在的位置是:首页 > 编程 > 

Go WebAssembly 入门(二)

2025-07-21 10:53:49
Go WebAssembly 入门(二) 系列文章 Go WebAssembly 入门(一)Getting Started编写main.go代码语言:javascript代码运行次数:0运行复制package main import ( "strconv" "syscall/js" ) // 传入value1, value2, result三个元素

Go WebAssembly 入门(二)

系列文章 Go WebAssembly 入门(一)

Getting Started

编写main.go

代码语言:javascript代码运行次数:0运行复制
package main

import (
  "strconv"
  "syscall/js"
)
// 传入value1, value2, result三个元素的id,将value1+value2结果赋给result元素
func add(ids []js.Value) {
  // 根据id获取输入值
  value1 := js.Global().Get("document").Call("getElementById", ids[0].String()).Get("value").String()
  value2 := js.Global().Get("document").Call("getElementById", ids[1].String()).Get("value").String()
 
  int1, _ := strconv.Atoi(value1)
  int2, _ := strconv.Atoi(value2)
  // 将相加结果set给result元素
  js.Global().Get("document").Call("getElementById", ids[2].String()).Set("value", int1+int2)
}

// 添加监听事件
func registerCallbacks() {
  js.Global().Set("add", (add))
}

func main() {
  c := make(chan struct{}, 0)
  println("Go WebAssembly Initialized!")
  registerCallbacks()

  <-c
}

将main.go编译成lib.wasm

代码语言:javascript代码运行次数:0运行复制
GOOS=js GOARCH=wasm go build -o lib.wasm main.go

在index.html中调用lib.wasm

代码语言:javascript代码运行次数:0运行复制
<html>
  <head>
    <meta charset="utf-8">
    <script src="wasm_exec.js"></script>
    <script>
      if (!WebAssembly.instantiateStreaming) { // polyfill
        WebAssembly.instantiateStreaming = async (resp, importObject) => {
          ct source = await (await resp).arrayBuffer();
          return await WebAssembly.instantiate(source, importObject);
        };
      }

      ct go = new Go();
      let mod, inst;
      WebAssembly.instantiateStreaming(fetch("lib.wasm"), go.importObject).then(async (result) => {
        mod = ;
        inst = result.instance;
        await go.run(inst)
      });
    </script>
  </head>
  <body>
    <input type="text" id="value1"/>
    <input type="text" id="value2"/>
    <button type="button" id="add" onClick="add('value1', 'value2', 'result');">add</button>
    <input type="text" id="result"/>
  </body>
</html>

打开server,在浏览器打开即可调用WebAssembly二进制文件执行。

代码语言:javascript代码运行次数:0运行复制
go run server.go

示例代码GitHub

reference

  • /
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2022-0-16,如有侵权请联系 cloudcommunity@tencent 删除webassembly二进制入门事件go

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1168840.html

相关标签:无
上传时间: 2025-07-21 06:28:25
留言与评论(共有 12 条评论)
本站网友 龙漫ps2模拟器
5分钟前 发表
原始发表:2022-0-16
本站网友 9月16
14分钟前 发表
0) println("Go WebAssembly Initialized!") registerCallbacks() <-c }将main.go编译成lib.wasm代码语言:javascript代码运行次数:0运行复制GOOS=js GOARCH=wasm go build -o lib.wasm main.go在index.html中调用lib.wasm代码语言:javascript代码运行次数:0运行复制<html> <head> <meta charset="utf-8"> <script src="wasm_exec.js"></script> <script> if (!WebAssembly.instantiateStreaming) { // polyfill WebAssembly.instantiateStreaming = async (resp
本站网友 天台二手房出售
7分钟前 发表
代码语言:javascript代码运行次数:0运行复制go run server.go示例代码GitHubreference/本文参与 腾讯云自媒体同步曝光计划
本站网友 城市房地产税
1分钟前 发表
_
本站网友 最新的法律法规
8分钟前 发表
分享自作者个人站点/博客
本站网友 李清泉
4分钟前 发表
_
本站网友 昭通美食
20分钟前 发表
(add)) } func main() { c
本站网友 李光洁博客
12分钟前 发表
'value2'
本站网友 马术场
28分钟前 发表
ids[0].String()).Get("value").String() value2
本站网友 中间页
10分钟前 发表
= strconv.Atoi(value1) int2
本站网友 安利护肤品
25分钟前 发表
代码语言:javascript代码运行次数:0运行复制go run server.go示例代码GitHubreference/本文参与 腾讯云自媒体同步曝光计划