在Go语言Web应用中使用WebAssembly

XD-DENG 发布于 2020年04月26日
tinyfool 尼克徐 等2人欣赏。

之前用Go+Vue.js实现了一个side project,主要用来解决平时自己经常遇到的一些问题,例如hash,base64 encode/decode,生成随机密码,转换unix time等。在向一个同事提起时,他的第一反应是问我“is it server-side or client-side?”。即如果是server-side,所有的操作都是在服务器端完成再发回给client,那这并不安全,尤其是生成随机密码以及base64 encode(很常见的use case是将含密码的字符串转化为base64,以方便pass给OpenShift那样的环境)。即使使用https来保证传输过程中较低风险,也很难保证服务提供者(例如我)不会悄悄保存用户提交及获取的信息。

最直接的方法当然是使用JS来实现这些功能,这样所有的操作都是在client端浏览器完成。但我并不太熟JS。这时恰好了解到了WebAssembly,这样我就可以继续用Go来实现所有的功能,并且它们能够在JS的环境中执行,我之前的大部分代码也能复用。

当作学习,我试着将我的这个side project用Go + WebAssembly + Vue.js重新实现了一次,https://handytools.xd-deng.com。源代码host在了GitHub上,https://github.com/XD-DENG/handytools-go-webassembly。也许对同样初学WebAssembly的朋友能有一点帮助,也欢迎指正代码中的问题。

(就像上面提到的,对我的这个side project,最优的方案依然是使用JS。使用WebAssembly更多是为了帮助自己了解一些新的东西)

暂无回复
登录 或者 注册