Golang绑定Lua脚本,小小封装一下
u013125772 · · 5642 次点击 · · 开始浏览好吧,我承认我有点无聊!
原来的时候,自己用C写过一个小东东,里面集成了lua脚本,lua主要用于配置系统,感觉很不错。
最近折腾了一段时间的Golang,写代码的感觉,的确比C爽,所以想着用Golang写个爬小说的稍微通用的爬虫,基本功能搞定后,发现配置还是用lua比较方便,便试着封装一下lua c-api的bindings,整了半天,发现挺累的,就去github搜了下,发现了几位前辈写的东东,但是感觉都不太满意,最后终于通过golang官网找到了这个。
恩,github.com/aarzilli/golua,这个封装,相对完整。试用了一下,和C-API基本一致,问题是,从配置文件里面取个东东,依然和C-API一样,繁琐无比。哎,之后只能自己再封装一下算了。整了2小时,感觉不错,读取基本配置没问题了。先贴出来看看,以后慢慢优化吧!
file: test.lua
w = 100
h = 100.2
str="hello world"
tb = {1,2,3,4,sd={n="twkun",p="password"},v="value",list={1,2,4,5,6,7,8}}file: test.go
package main
import (
"./LuaWrapper"
//"twkun/tool/LuaWrapper"
"fmt"
)
func main () {
lua := new(LuaWrap.LuaWrap)
lua.Init()
lua.DoFile("test.lua")
defer lua.Close()
fmt.Println(lua.GetInteger("w"))
fmt.Println(lua.GetNumber("h"))
fmt.Println(lua.GetData("h").(float64))
fmt.Println(lua.GetString("str"))
var tb LuaWrap.ILuaTable = lua.GetTable("tb")
fmt.Println(tb.GetString("v"))
tf := tb.GetTable("sd")
//tf := tb.GetData("sd").(LuaWrap.ILuaTable) //ok
fmt.Println(tf.GetString("n"))
fmt.Println(tf.GetData("n").(string))
fmt.Println(tb.GetTable("sd").GetString("p"))
fmt.Println(tb.GetTable("sd").GetData("p").(string))
n := tb.GetSize()
fmt.Println(n)
for i := 1;i<= n;i++ {
fmt.Println(tb.GetIndex(i).(float64))
}
fmt.Println()
tf = tb.GetTable("list")
n = tf.GetSize()
fmt.Println(n,"\n")
for i := 1;i<= n;i++ {
fmt.Println(tf.GetIndex(i).(float64))
}
}测试代码,随便写写,命名那个差呀,以后要注意!改天有空整理一下,发github上。
感觉不错,哎,周末年会,无语一下,又去滇池边,无比~~~
2013年12月13日
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
好吧,我承认我有点无聊!
原来的时候,自己用C写过一个小东东,里面集成了lua脚本,lua主要用于配置系统,感觉很不错。
最近折腾了一段时间的Golang,写代码的感觉,的确比C爽,所以想着用Golang写个爬小说的稍微通用的爬虫,基本功能搞定后,发现配置还是用lua比较方便,便试着封装一下lua c-api的bindings,整了半天,发现挺累的,就去github搜了下,发现了几位前辈写的东东,但是感觉都不太满意,最后终于通过golang官网找到了这个。
恩,github.com/aarzilli/golua,这个封装,相对完整。试用了一下,和C-API基本一致,问题是,从配置文件里面取个东东,依然和C-API一样,繁琐无比。哎,之后只能自己再封装一下算了。整了2小时,感觉不错,读取基本配置没问题了。先贴出来看看,以后慢慢优化吧!
file: test.lua
w = 100
h = 100.2
str="hello world"
tb = {1,2,3,4,sd={n="twkun",p="password"},v="value",list={1,2,4,5,6,7,8}}file: test.go
package main
import (
"./LuaWrapper"
//"twkun/tool/LuaWrapper"
"fmt"
)
func main () {
lua := new(LuaWrap.LuaWrap)
lua.Init()
lua.DoFile("test.lua")
defer lua.Close()
fmt.Println(lua.GetInteger("w"))
fmt.Println(lua.GetNumber("h"))
fmt.Println(lua.GetData("h").(float64))
fmt.Println(lua.GetString("str"))
var tb LuaWrap.ILuaTable = lua.GetTable("tb")
fmt.Println(tb.GetString("v"))
tf := tb.GetTable("sd")
//tf := tb.GetData("sd").(LuaWrap.ILuaTable) //ok
fmt.Println(tf.GetString("n"))
fmt.Println(tf.GetData("n").(string))
fmt.Println(tb.GetTable("sd").GetString("p"))
fmt.Println(tb.GetTable("sd").GetData("p").(string))
n := tb.GetSize()
fmt.Println(n)
for i := 1;i<= n;i++ {
fmt.Println(tb.GetIndex(i).(float64))
}
fmt.Println()
tf = tb.GetTable("list")
n = tf.GetSize()
fmt.Println(n,"\n")
for i := 1;i<= n;i++ {
fmt.Println(tf.GetIndex(i).(float64))
}
}测试代码,随便写写,命名那个差呀,以后要注意!改天有空整理一下,发github上。
感觉不错,哎,周末年会,无语一下,又去滇池边,无比~~~
2013年12月13日