OpenResty编码规范
变量名
所有变量都使用local声明, 限制作用域. 变量名小写, 使用下划线连接.
常量名
常量名全部大写, 多个单词通过下划线_
连接.
文件名
lua文件名使用小写字母, 多个单词通过下划线_
连接.
函数
函数名称全部小写, 使用下划线
_
进行连接单个函数不要过长, 尽量拆分为多个子函数.
对函数缓存
使用本地变量来缓存函数(函数指针, 函数的内存地址), 加速之后的请求的调用.
这里要强调一点, 标准API(函数)对应的本地变量别名一定不能随性命名, 会给团队其他的开发人员造成困惑, 需要统一和标准API名字一样, 只是把点替换成下划线, 其他保持不变, 比如:
|
|
空行与空格
- 文件级别的函数之间空2个空行
- 代码不同意群的block之间空一个空行
- 各种运算符前后空一个空格, 逗号后空一个空格
记录版本号
模块要有版本号和模块名字, 比如:
|
|
如果不是模块, 而是代码文件, 也要加上版本信息:
需要使用注释的方式标明, 如果使用local _VERSON = 0.1
这种定义本地变量的方式, luacheck检查的时候会报定义的变量未使用的错误.
|
|
代码长度
控制单行代码的长度, 不要超过80
个字符. 如果单行代码过长, 可以直接换行(注意lua的换行不能使用\
, 直接换行即可), 第二行注意要缩进, 保持代码美观.
注释
代码中晦涩难懂的地方, 一定要加上注释.
单行注释使用-- 后接一个空格
.
多行注释使用--[[]]
, 一定要注意--
和[[
之间无空格, 否则无法换行. 举例:
|
|
如果多行注释中存在[[
字符, 需要这样:
|
|
字符串引用
lua中的字符串最好都统一使用
""
包含(当然有些时候使用[[]]
是必须的), 就像python中都习惯统一使用''
一样.特别长的字符串使用
[[]]
来代替""
, 可以直接折行,""
无法在字符串内部直接折行.
模块
建议通过模块的方式编写项目具体功能, 然后通过require的方式关联, 清晰简洁. 模块变量名统一使用_M
, 尽量不要自定义名字.
不要直接在模块_M
中定义函数, 会导致内存增加, 可通过function _M.funcname()
的方式定义或先定义本地函数, 最后通过_M.funcname = funcname
的方式关联.
|
|
不想对外暴露的模块函数需要使用一个下划线修饰, 这样开发者一看代码就明白哪些模块函数是要给外部调用的, 哪些不是. 接着上面的代码举例:
|
|
记录日志
在可能出错的地方记录日志到nginx的error.log
文件, 比如:
|
|
ngx.exit
使用ngx.exit(0)
、ngx.exit(403)
等操作时, 前面使用return
修饰.
|
|
静态代码检查工具
lua代码尽量通过luacheck
和lj-releng
这两个lua的静态代码检测工具的规范检测, 注意有时候luacheck
的要求可能较苛刻, 对于有些场景可能检测的结果也不一定就很对, 所以不必严格遵守, 能做到提醒我们的作用就很好. 尽量完全处理lj-releng
的提示信息.
使用这两种代码规范的检查工具, 不仅对我们写出赏心悦目、方便阅读的代码风格有好处, 而且还可以帮助我们发现代码中潜在的问题或错误.
持续更新…