V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
plqws
V2EX  ›  Go 编程语言

go-quickjs:现在可以在 Go 语言中使用 QuickJS 引擎了

  •  
  •   plqws ·
    wspl · 2019-07-15 17:54:05 +08:00 · 6017 次点击
    这是一个创建于 1718 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://github.com/wspl/go-quickjs

    自 quickjs 发布后,我十分兴奋并把它写成了 Go Bindings …… 使得可以在 Go 语言中使用 QuickJS 引擎。

    目前支持的有限特性:

    • 执行脚本
    • 执行基于 []byte 的字节码
    • 将脚本编译为 []byte 形式的字节码
    • 简单的错误处理
    • 从 JavaScript 中调用 Go 的函数
    • 在 Go 中组装与操作 JavaScript 对象

    目前仅在 MacOS 下测试可用,Linux 理论上可用,对于其他平台的支持,欢迎大家参与贡献!

    https://github.com/wspl/go-quickjs

    23 条回复    2019-07-18 22:50:26 +08:00
    AngelCriss
        1
    AngelCriss  
       2019-07-15 17:58:45 +08:00 via Android
    binding 是不是就是用 cgo 封装了下?
    eslizn
        2
    eslizn  
       2019-07-15 18:28:25 +08:00
    MeteorCat
        3
    MeteorCat  
       2019-07-15 18:31:24 +08:00 via Android
    用 c 就行了,cgo 还得再绑定一层
    plqws
        4
    plqws  
    OP
       2019-07-15 18:41:49 +08:00
    @eslizn #2
    @MeteorCat #3
    因为我们自己的 Go 项目有需求,所以才写这个东西。如果不用 cgo,还有其他更好的方法吗?
    eslizn
        5
    eslizn  
       2019-07-15 18:46:27 +08:00
    @plqws 有的,我就重写过我司的几个 cgo 组件
    另外 js 的 pure go 虚拟机:
    https://github.com/dop251/goja
    https://github.com/robertkrimen/otto
    MeteorCat
        6
    MeteorCat  
       2019-07-15 18:47:13 +08:00 via Android
    nodejs 和 go 直接挂起 rpc,两者提供接口,不同的语言只要保证接口参数一致而不是生搬硬套,而且使用 rpc 能够提供很强扩展性
    MeteorCat
        7
    MeteorCat  
       2019-07-15 18:48:42 +08:00 via Android
    rpc 能够抹平任何语言差距,哪怕以后你们扩展新的语言也能保证两者的通信交换
    plqws
        8
    plqws  
    OP
       2019-07-15 18:53:00 +08:00
    @eslizn #5 我们现在就在用这些纯 Go 实现,但是编译和执行字节码是我们的未来需求。而且这些实现对 ECMAScript 的实现版本太低了,需要额外 babel 转译。

    @MeteorCat #6 这种方案在移动平台不适用,而且 NodeJS 有 ~15M,太臃肿,v8 也有 ~8M 左右
    Rorysky
        9
    Rorysky  
       2019-07-15 19:06:20 +08:00 via iPhone
    一口暴击
    Rorysky
        10
    Rorysky  
       2019-07-15 19:08:13 +08:00 via iPhone
    go 用于移动平台 是什么场景?
    plqws
        11
    plqws  
    OP
       2019-07-15 19:14:53 +08:00
    @Rorysky #9 #10 本来就是个满足我们项目需求的衍生小项目,没啥暴击不暴击的,脱离需求去讨论一个项目的意义本身就没有意义。
    使用 场景当然是商业机密咯,整个 go-mobile 都是 cgo 实现的,难不成 go-mobile 也别用了?
    Rorysky
        12
    Rorysky  
       2019-07-15 19:21:16 +08:00 via iPhone
    @plqws 大佬误会,我是表达惊异的意思
    mamahaha
        13
    mamahaha  
       2019-07-15 19:25:18 +08:00
    我还没学 go,这个题目我不太理解,go 语言能执行 js 代码吗?这也太强了吧?
    plqws
        14
    plqws  
    OP
       2019-07-15 19:25:34 +08:00
    @Rorysky #12 误解了,抱歉。
    对其他人:
    这个项目对大多数人来说应该就是个小玩具吧,但对于我们自己来说是刚需。希望大家看问题的角度能积极一点吧,打击别人不仅对自己没好处,对开源社区也没好处,嘴下留情吧。
    plqws
        15
    plqws  
    OP
       2019-07-15 19:27:11 +08:00
    @mamahaha #13 Go 语言是可以执行 JavaScript 代码,而且有很多种方法。我这个小项目只是其中一种方法而已。
    Rorysky
        16
    Rorysky  
       2019-07-15 19:33:07 +08:00 via iPhone
    @plqws 我还想着 go 编译成 wasm 不就能和 js 交互了么?
    1981
        17
    1981  
       2019-07-15 19:35:48 +08:00
    plqws
        18
    plqws  
    OP
       2019-07-15 19:37:14 +08:00
    @Rorysky #16 go 编译成 wasm 的话,就可以在浏览器中使用那些用 go 写的程序和库了。这个库是在非浏览器环境下使用 javascript 语言。这两个目的正好相反。
    luozic
        19
    luozic  
       2019-07-15 22:43:44 +08:00 via iPhone
    为啥不走 rpc ?
    SPACELAN
        20
    SPACELAN  
       2019-07-15 22:58:02 +08:00
    楼主的项目对性能要求严格吗
    kimown
        21
    kimown  
       2019-07-16 08:14:02 +08:00 via Android
    pc 用 nodejs,mobile 有 jsc 和 v8,这个使用场景在哪
    locoz
        22
    locoz  
       2019-07-16 08:18:56 +08:00 via Android
    😄看完全贴我已经猜到楼主的业务场景是啥了,牛逼啊
    sirgod
        23
    sirgod  
       2019-07-18 22:50:26 +08:00
    作为区块链的合约引擎?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5393 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 07:04 · PVG 15:04 · LAX 00:04 · JFK 03:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.