起因
在下本来是做Java开发的,然后老大突然给我下发一个任务——面向国产网关apisix做插件开发,然后看了一下,插件是用lua语言开发的,然后就上手了lua进行了一段时间开发。
经过一阵子学习,只能说是刚刚入门,基本是掌握一定的编写运用,再更深层次的理解使用还是欠缺的,为了让这阵子踩坑的时间不白费,我决定还是记录一下一些小错误。
学习资源
在摸索的过程中我还是留下了一两个比较好的参考资料
一个openresty的gitbook: https://moonbingbing.gitbooks.io/openresty-best-practices/content/lua/main.html
经典的菜鸟教程: https://www.runoob.com/lua/lua-tutorial.html
个人总结
因为我需要到达的程度只是能进行apisix业务开发,所以更深入的知识我也没涉足,只能提供一些浅显的小坑经验了。
- 使用习惯
- 字符串拼接
这个其实是比较简单普遍的一个点,在 Java 中最顺手的字符串拼接是"str1" + "str2"
,而在 lua 开发中,普遍运用的是..
,两个字符串拼接是"str1".."str2"
- 不等于
在Java开发中,不等于的符号为!=
,而在lua开发时,不等于符号为~=
- 导包
因为我没有找到什么比较容易上手的自动补全编写工具,我基本上都是手动导包的,此处要注意导包的路径,导包的写法为your_var = require("your_place.your_place")
- 变量引用
lua 里面要是突然引用什么变量的时候,一定要初始化一下,不然就会报 nil 错误,这个 nil 真的贯穿我的整个开发时间,你对着 vscode 写的时候真的就不知道哪个变量忘了初始化。
- 字符串拼接
- 语言相关
- pairs 和 iparis
这两个都是用来遍历 lua 中的table
的,但是区别在于ipairs
不会遍历数组内的table
类型,而pairs
是会遍历其中的table
类型的。 - table里可以放什么
lua中的table
不需要像 Java 中的数组一样指定类型,所以就是它可以同时存不同类型的东西在里面 - 判断数组大小
在 lua 中,#
是一个神奇的符号,可以用在获取字符串的长度和数组的长度,具体用法为str_length = #str_name
,arr_length = #array_name
- 入参出参
lua中是可以多个入参和多个出参的,比如local a, b, c = func(d, e, f)
,很多方法都是这样写的,一时间我真的没习惯过来
- pairs 和 iparis