lua基础知识
首先对于一个后端开发学会一门脚本语言是比较重要的,为什么学lua,首先lua基于c,可以在所有平台运行.
lua解析器较小大约200k,还有最重要的一点,它可以说是最快的脚本语言(maybe),适合ios,Android,H5等的嵌入式,热更一把好手
同时比较好的扩展能力,用户可自定义导入的包
可能python是现在脚本之王,但是各有各的好处,之后可能会补上python,但是lua才是本篇博客的主角
lua可能干所用事情,嵌入式,web......下面就做个笔记,但是不管啥都需要从基本语法来
lua的常用关键字
1.helloworld
print("hello world")
这就是lua的helloworld一样类似于几乎所有的语言(可能编写格式不一样,但是都差不多)
2.if 语法
local a = 10
if (a > 10) then
print("good guest ok!!!")
end
if语句如上,和所有编程语言一样
3. else 语法
local a = 10
if (a > 10) then
print("good guest ok!!!")
else
print("missing !!!")
end
if else 语法差不多就是这样,极度类似于c/c++
tips:lua不算是一个强类型语言不像纯后端一样,就一个简单的local就可以代表可以用到的数据类型
lua语法的continue和break语法晦涩且使用场景不太多(这种写法不可读,个人觉得,可以尝试写一个看看:)
下面的语句还是比较晦涩的goto ::continue:: 不好用
array={3,4,5,6,7,8,9,10,11,12}
for key,val in ipairs(array) do
if val>9 then
print(val+1)
goto continue
end
print(val*val)
::continue::
end
上面的代码可以使用较好的代码代替.....
lua的常用方法
assert (v [, message]) 断言出现问题会咋样咋样
断言可以理解成一个判断
--这里输入一个数字
print(string.format("Please Enter A Number:"))
input1 = assert(io.read("*number"))
print(input)
也就是键盘输入不是一个number类型的数据就会抛出异常
ipairs (t)循环对于一个table,可以获取到对应的数据类型的数值
local tabFiles = {
[3] = "test2",
[6] = "test3",
[4] = "test1"
}
for k, v in ipairs(tabFiles) do
print(k, v)
end
就是这样使用,其中要注意的一点是lua的索引是从1开始没有0
lua的函数
function [函数方法名称](param1,param2)
大致是这样的。
函数使用中注意下面几点:
- 在函数的基本使用中入参不需要指定参数类型
- 不需要编写函数返回值的类型,想返回几个就返回几个
- 方法用local修饰只能在本文件里面使用,且程序是在寄存器里面跑会比较快
实例:计算两个数字之间的最大值,以及两个数字之间的差值。
local max,dvi
function max(num1, num2)
if (num1 > num2) then
div = num1 - num2
max = num1;
else
div = num2 - num1
result = num2;
end
return result,div;
end
-- 调用函数
print("两值比较最大值以及差值为 ",max(10,4))
print("两值比较最大值以及差值为 ",max(5,6))
上面就是lua的函数使用方法
数据结构
我感觉只需要会用一个就ok---table
table的使用:有基本的增删改查,差不多就是些,常用的如下代码所示:一般使用于开发交互一般是json,所以这里还牵扯一个基本的包json包,在程序开始的时候添加上
-- 常用的方法就是 json.encode(),将table转换成json字符串
-- json.decode(),将json转换成table类型可以直接在lua里面遍历,大概就是这样用
reqire("json")
local res = {}
local data = {}
table.insert(data,{key = 1,value = 2})
rawset(res,"code",200)
rawset(res,"data",data)
rawset(res,"msg","返回成功")
-- 这样的话就给前端传递一个json串
res = json.encode(res)
print(res)
下面几点是比较重要的
- rawset()是重新赋值会将之前的数值覆盖掉(可以类比java,c++里面的set这样一个结构,差不多)
- table.insert()不会覆盖之前的值,知识在基础上面追加,类似于append(),差不多
lua的垃圾回收
Lua 提供了以下函数collectgarbage ([opt [, arg]])用来控制自动内存管理:
https://www.runoob.com/lua/lua-garbage-collection.html
-
collectgarbage("collect"): 做一次完整的垃圾收集循环。通过参数 opt 它提供了一组不同的功能:
-
collectgarbage("count"): 以 K 字节数为单位返回 Lua 使用的总内存数。 这个值有小数部分,所以只需要乘上 1024 就能得到 Lua 使用的准确字节数(除非溢出)。
-
collectgarbage("restart"): 重启垃圾收集器的自动运行。
-
collectgarbage("setpause"): 将 arg 设为收集器的 间歇率。 返回 间歇率 的前一个值。
-
collectgarbage("setstepmul"): 返回 步进倍率 的前一个值。
-
collectgarbage("step"): 单步运行垃圾收集器。 步长"大小"由 arg 控制。 传入 0 时,收集器步进(不可分割的)一步。 传入非 0 值, 收集器收集相当于 Lua 分配这些多(K 字节)内存的工作。 如果收集器结束一个循环将返回 true 。
-
collectgarbage("stop"): 停止垃圾收集器的运行。 在调用重启前,收集器只会因显式的调用运行。
垃圾回注意回收时机就行
数据库连接
这个东西比较不重要应该是没有人去用lua操作数据库
大家可以可以使用对应的orm框架来操作
https://github.com/itdxer/4daysorm 这样一个开源框架能更好使用数据,不过orm框架要自己实现,本人实现了简单的crud,到时同时同步到博客
lua结束语:lua其实比较简单大致学一下就行,能给程序员工资加好多,还简单,可做嵌入式,游戏开发,ios,ios,Android,H5
可以依靠lua做一个简单的电视盒子软件,一个字cool!!!
go学习
- go语言出身华丽,谷歌出品,一经推出就比较火
- 兼具 Python 等动态语言的开发速度和 C/C++ 等编译型语言的性能与安全性
- go的薪资是比较高的,go语言是互联网大厂明星语言,特别现在都是服务上云,这样就让go更加的火爆
- go还有一个比较好的特性,就是可以直接生成一个文件,在其他未配置go环境的电脑上也可以运行
1.helloworld
// go的主程序必须要在main包下面
package main
import "fmt"
func main() {
fmt.Println("hello world");
}
helloworld类似于c++。java这些语言
数据类型
逻辑控制&运算符&iota
结构体
继承和实现
方法
方法指向
接口
空接口(类比javaobject类)
数据结构
切片
数组
map
类型强转 strconv
错误处理
并发
gmp
sync.WaitGroup 类比juc countDownLatch
channel
select多路复用
并发安全和锁
sync.Map 类比 ConcurrentHashMap
原子操作 CAS
实例
func CompareAndSwapInt32(addr *int32, old, new int32) (swapped bool)
Iris框架 Echo-intro 框架&gin框架&beego框架&网络编程
中间件
太累了,不想写了.....