Golang与JavaScript的简单实用集成方法

Golang与JavaScript的简单实用集成方法 我很高兴与大家分享我的新JavaScript库。这个库简单直观,易于使用。它默认使用Ducktape作为JavaScript引擎(全平台支持),在Linux平台上还支持jerryScript和chakracore。Js引擎运行在独立的进程中,通过TCP套接字与应用程序和服务器进行通信。从客户端应用程序的角度来看,它就像一个常规的Go库。我邀请您查看…https://github.com/CargoWebServer/CargoWebServer/tree/master/Project/src/code.myceliUs.com/GoJavaScript

您可以通过单元测试了解如何将其集成到您的应用程序中

package GoJavaScript

import "testing"
import "log"

import "code.myceliUs.com/GoJavaScript"
import "code.myceliUs.com/GoJavaScript/GoJavaScriptClient"

type GenderType int

const (
	Male GenderType = 1 + iota
	Female
)

// A simple Go struct that contain array, properties and constant values.
type Person struct {
	// Must be GoJavaScript.Person
	TYPENAME  string
	FirstName string

Go和Js是我的最佳组合!-)


更多关于Golang与JavaScript的简单实用集成方法的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang与JavaScript的简单实用集成方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


以下是一个基于您提供的库的Go与JavaScript集成示例,展示如何通过TCP套接字与JavaScript引擎交互。该示例扩展了您代码中的Person结构,并演示了Go调用JavaScript函数的方法:

package main

import (
    "log"
    "code.myceliUs.com/GoJavaScript"
    "code.myceliUs.com/GoJavaScript/GoJavaScriptClient"
)

// 定义GenderType枚举
type GenderType int
const (
    Male GenderType = 1 + iota
    Female
)

// Person结构体映射到JavaScript端
type Person struct {
    TYPENAME  string // 必须与JavaScript类型名匹配
    FirstName string
    LastName  string
    Age       int
    Gender    GenderType
}

func main() {
    // 初始化JavaScript客户端
    client, err := GoJavaScriptClient.NewClient("localhost:8080")
    if err != nil {
        log.Fatal("连接失败:", err)
    }
    defer client.Close()

    // 创建Go结构体实例
    person := Person{
        TYPENAME:  "Person",
        FirstName: "John",
        LastName:  "Doe",
        Age:       30,
        Gender:    Male,
    }

    // 将Go对象传递给JavaScript环境
    jsPerson, err := client.ToJavaScriptObject(person)
    if err != nil {
        log.Fatal("对象转换失败:", err)
    }

    // 调用JavaScript方法处理对象
    result, err := client.CallFunction("processPerson", jsPerson)
    if err != nil {
        log.Fatal("函数调用失败:", err)
    }

    // 处理返回结果
    log.Printf("JavaScript处理结果: %v", result)
}

对应的JavaScript端代码示例(需在JavaScript引擎中运行):

// processPerson函数接收Go传递的Person对象
function processPerson(person) {
    // 修改对象属性
    person.Age += 1;
    person.FullName = person.FirstName + " " + person.LastName;
    
    // 返回增强后的对象
    return {
        original: person,
        message: `处理完成,新年龄: ${person.Age}`
    };
}

关键集成要点:

  1. 结构体字段TYPENAME必须与JavaScript端的类型名严格匹配
  2. 通过ToJavaScriptObject方法实现Go到JavaScript的类型映射
  3. 使用CallFunction实现跨语言函数调用
  4. TCP通信由库自动处理,开发者只需关注业务逻辑

单元测试可参考库中的测试文件验证完整工作流程。

回到顶部