goscript: 遇见 yaegi 所带出的思路
最近,看见 python 出了个 pyscript ,据说可以在浏览器里面使用 python 脚本。
作为一个 gopher,怎么不想在浏览器里面也带个 go 呢?
遇见 yaegi
恰巧,最近,在 github 上,就看见有一个神奇的项目即 yaegi ,这个是一个"神奇"的 go 解释程序。
它实现了和宿主程序的无缝对接。包括类型映射等等。
比如,想要调用脚本里面的一个函数,我们可以:
以上代码来自官方例子
由这个例子,我们可以看出,内嵌函数居然可以直接类型转换成 go 原生的函数,并且调用。
对 yaegi 有兴趣的,可以转官网: https://github.com/traefik/yaegi
当 yaegi 遇到浏览器
对了,yaegi 确实很酷,但是它根 goscript 有什么关系。它终归只是 go 的内嵌语言。
当然有关系了,因为我们还有一个杀器,那就是 wasm。wasm 可以将 go 语言直接编译成 web
先来看看,我们这个 demo 的简单界面。
左边为一个“超”强大的文本输入框。
再加上一个运行按钮 这就是我们的界面全部。
index.html 代码参考:
main.go 代码参考:
一切,也就这么多,100 行代码左右吧。
然后,在脚本里面如何调用浏览器函数?
看到代码中的 Symbols["global/global"] 了没? 我定义了一个 global 模块,专门用来获取 js 中的全局变量。
所以,我们可以:
仅需要:
就可以调用 js 的 alert 函数了。
当然,我们也可以将 alert 函数直接注册到 global 模块,那么就更方便了。
注意看代码的 68 行,那就是我写了一半的想法。
关于这个 demo,今天就写到这里了。
算是开了个坑,以后看什么时候再填一铲子。
补充:
如何编译:
版权声明: 本文为 InfoQ 作者【humboldt】的原创文章。
原文链接:【http://xie.infoq.cn/article/5e0229cac026355bf016c7cc1】。文章转载请联系作者。
评论