好吧,我承认我有点无聊!
原来的时候,自己用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
有疑问加站长微信联系(非本文作者)