用Golang运行JavaScript的实现示例

C++太麻烦(难)了,想要盘弄一下V8实在是有些费劲,但是Golang社区出了几个Javascript引擎,要尝试在别的语言中如何集成Javascript,是个不错的选择。以下选了github.com/dop251/goja 来做例子。

Hello world

照着仓库的Readme,来一个:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

package main

 

import (

 "fmt"

 js "github.com/dop251/goja"

)

 

func main() {

 vm := js.New() // 创建engine实例

 r, _ := vm.RunString(`

  1 + 1

 `) // 执行javascript代码

 v, _ : = r.Export().(int64) // 将执行的结果转换为Golang对应的类型

 fmt.Println(r)

}

这个例子展示了最基本的能力,给定一段Javascript的代码文本,它能执行得到一个结果,并且能得到执行结果的宿主语言的表示形式。

交互

Javascript和Golang之间的交互分成两个方面:Golang向Javascript引擎中注入一些上下文,例如注册一些全局函数供Javascript使用,创建一个对象等;Golang从Javascript引擎中读取一些上下文,例如一个计算过程的计算结果。先看第一类。

常用的手段是,通过Runtime类型提供的Set方法在全局注册一个变量,例如

?

1

2

3

4

5

...

rts := js.Ne

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,我们需要了解两个概念:客户端和服务器端。客户端是指用户使用的设备,如电脑、手机等;服务器端是指提供服务的计算机,如网站、聊天室等。 在本例中,我们需要用到以下技术:HTML、CSS、JavaScript 和 Go 语言。其中,HTML、CSS 和 JavaScript 用于开发客户端,Go 语言用于开发服务器端。 以下是一个简单的聊天室实现步骤: 1. 创建 HTML 页面,包括聊天室界面和发送消息的表单。 ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Chat Room</title> <style> /* 样式表 */ </style> </head> <body> <div id="chatroom"> <!-- 聊天室界面 --> </div> <form id="message-form"> <input type="text" id="message-input"> <button type="submit">Send</button> </form> <script src="chatroom.js"></script> </body> </html> ``` 2. 创建 CSS 样式表。 ```css /* 样式表 */ ``` 3. 创建 JavaScript 文件 chatroom.js,实现客户端与服务器端通信和消息显示功能。 ```javascript // 创建 WebSocket 连接 const ws = new WebSocket("ws://localhost:8000/ws"); // 监听连接事件 ws.addEventListener("open", event => { console.log("Connected to server"); }); // 监听消息事件 ws.addEventListener("message", event => { const message = event.data; // 在聊天室界面中显示消息 }); // 监听表单提交事件 const form = document.getElementById("message-form"); form.addEventListener("submit", event => { event.preventDefault(); // 阻止表单提交 const input = document.getElementById("message-input"); const message = input.value; input.value = ""; // 清空输入框 // 发送消息到服务器 ws.send(message); }); ``` 4. 创建 Go 语言服务器端,实现 WebSocket 连接和消息转发功能。 ```go package main import ( "fmt" "net/http" "github.com/gorilla/websocket" ) var upgrader = websocket.Upgrader{ ReadBufferSize: 1024, WriteBufferSize: 1024, } func main() { http.HandleFunc("/ws", handleWebSocket) http.ListenAndServe(":8000", nil) } func handleWebSocket(w http.ResponseWriter, r *http.Request) { conn, err := upgrader.Upgrade(w, r, nil) if err != nil { fmt.Println(err) return } defer conn.Close() for { // 接收消息 _, message, err := conn.ReadMessage() if err != nil { fmt.Println(err) break } // 转发消息到所有客户端 for _, c := range clients { err = c.WriteMessage(websocket.TextMessage, message) if err != nil { fmt.Println(err) break } } } } ``` 以上就是一个简单的聊天室实现步骤。需要注意的是,本例中的服务器端只是一个简单的示例,实际应用中需要考虑更多的安全性和可靠性问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值