游乐游手机版
首页/网络安全/文章详情

Golang Binding 开发完成与项目交付说明

时间:2026-08-20 16:23
最近我对 Go 语言很感兴趣,一直在考虑用 Go 来做一些实际项目:以 Go 作为主框架,再通过动态加载的方式执行部分程序。不过目前 Go 语言并不支持 Go 模块的动态链接,因此还需要搭配一种脚本语言来补充能力。经过一番筛选后,我觉得 Lua 很符合这个需求:它的虚拟机体积小、运行效率高,而且可以

最近我对 Go 语言很感兴趣,一直在考虑用 Go 来做一些实际项目:以 Go 作为主框架,再通过动态加载的方式执行部分程序。不过目前 Go 语言并不支持 Go 模块的动态链接,因此还需要搭配一种脚本语言来补充能力。经过一番筛选后,我觉得 Lua 很符合这个需求:它的虚拟机体积小、运行效率高,而且可以同时开启多个 Lua 虚拟机并并发执行多个 Lua 脚本。于是我继续寻找 Go 与 Lua 的 binding 方案,最后找到了 golua。可惜这个项目已经很久没有更新,在 Go1 环境下甚至无法直接编译通过,我做了一些修改后才勉强编译成功。但继续测试时又发现,没办法把 Go 函数注册到 Lua 中执行,这就比较麻烦了……

一个goluabinding完工

没办法,只好自己动手写一个,希望这个 Go Lua binding 至少能满足以下几个需求:

  1. 可以将 Go 函数注册到 Lua 中,扩展 Lua 的函数库能力
  2. 可以同时执行多个 Lua 脚本,满足并发调用场景
  3. 支持 bool、int、float、string 等基础类型之间的相互转换,其他类型暂时先不考虑
之后又继续补充了几个功能:
  1. 支持从 Go 中调用 Lua 中定义的函数
  2. 其他类型统一转换为 Lua 中的 userdate,只能再传回 Go 中使用
  3. 支持不定参数传递
不过说实话,我对 Go 和 Lua 都还是新手……于是查阅了不少 Go 文档和 Lua 文档,也参考了 golua 以及 Lua 5.1 的部分实现,最终总算写完了。整体效果我自己感觉还不错,下面是一个简单示例:
package main

import (
"fmt"
"glua"
)

type Int struct {
I int
}

func NewInt() *Int {
return &Int{10}
}

func (i Int) PrintInt(str string) {
fmt.Println(str, i.I)
}

func main() {
L := glua.NewState()

L.Openlibs()

var tlib = glua.Libfuncs{
"gotest", // lib name
map[string]interface{}{
"NewInt": NewInt, // lua function name, go function
"PrintInt": (*Int).PrintInt, // lua function name, go function
"goprintln": fmt.Println,
},
}
if ok, err := L.Register(&tlib); !ok {
fmt.Println(err.Error())
return
}

L.Dostring(`gotest.PrintInt(gotest.NewInt(), "Int is")`)

L.Dofile("test.lua")

L.Call("gotest.goprintln", "Call lua function.", 123456)
}
--test.lua
gotest.goprintln(true, 123, "lua", gotest.NewInt())


在 code.google.com/p/glua 可以查看完整代码。编译时需要使用 luajit,因为 Lua 5.1 默认编译出来的是静态库,而 Go1 当时并不支持链接静态库,所以这里最终选择了 luajit 作为底层实现。

来源:https://apiv1.oschina.net/oschinapi/blog/detail?id=64514
上一篇进度条设计中的细节优化与用户体验提升 下一篇如何使用telnet命令关闭Tomcat服务
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
DDoS攻击的三大主要形式:原理、特征与防御重点
网络安全 · 2026-08-31

DDoS攻击的三大主要形式:原理、特征与防御重点

DDoS攻击主要分为基于流量(Volume)、基于应用层(Application)和基于协议(Protocol)三种形式。流量型攻击通过海量数据淹没带宽;应用层攻击利用Web漏洞耗尽服务器资源;协议层攻击则利用TCP握手缺陷导致系统挂起。了解这些原理是制定针对性防御策略的基础。

如何有效预防和缓解DDoS攻击:5大核心策略详解
网络安全 · 2026-08-31

如何有效预防和缓解DDoS攻击:5大核心策略详解

面对DDoS攻击,单纯增加带宽已非长久之计。本文详解5大核心防护策略:优化网络硬件配置、建立DNS冗余机制、部署透明缓解技术、引入负载平衡器及专用Anti-DDoS模块。通过合理组合这些技术手段,可有效抵御SYN泛洪、Slowloris等常见攻击,保障业务连续性与网站可用性。

DDoS防护四大误区:CDN、防火墙与黑名单的局限性解析
网络安全 · 2026-08-31

DDoS防护四大误区:CDN、防火墙与黑名单的局限性解析

许多企业误以为CDN、防火墙或黑名单能完全抵御DDoS攻击。本文深入解析四大常见误区:CDN仅提供部分缓解、静态黑名单易失效、防火墙算力有限且可能成为目标、阈值警报仅具滞后性。了解这些局限性,有助于构建更立体的防御体系,避免在攻击发生时措手不及。

常见DDoS攻击类型详解:原理、特征与防御策略
网络安全 · 2026-08-31

常见DDoS攻击类型详解:原理、特征与防御策略

本文详细解析四种常见DDoS攻击类型:SYN Flood利用TCP三次握手缺陷耗尽资源;UDP Flood通过海量数据包造成带宽拥塞;ICMP Flood利用Ping请求消耗系统算力;应用层Flood针对Web脚本进行高频请求。了解其原理是制定有效防御策略的基础。

如何有效抵御DDOS攻击:4种核心防护方案解析
网络安全 · 2026-08-31

如何有效抵御DDOS攻击:4种核心防护方案解析

面对DDOS攻击,企业需构建多层防护体系。本文详解四大核心策略:利用反向路由器查询进行流量清洗,通过GCDN智能分配节点隐藏源站IP,部署负载均衡硬件分担压力,以及接入高防机房抵御数百G恶意流量。掌握这些技术,可最大程度保障业务连续性。