lua&go基础知识点

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)
大致是这样的。
函数使用中注意下面几点:

  1. 在函数的基本使用中入参不需要指定参数类型
  2. 不需要编写函数返回值的类型,想返回几个就返回几个
  3. 方法用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)

下面几点是比较重要的

  1. rawset()是重新赋值会将之前的数值覆盖掉(可以类比java,c++里面的set这样一个结构,差不多)
  2. table.insert()不会覆盖之前的值,知识在基础上面追加,类似于append(),差不多

lua的垃圾回收

Lua 提供了以下函数collectgarbage ([opt [, arg]])用来控制自动内存管理:
https://www.runoob.com/lua/lua-garbage-collection.html

  1. collectgarbage("collect"): 做一次完整的垃圾收集循环。通过参数 opt 它提供了一组不同的功能:

  2. collectgarbage("count"): 以 K 字节数为单位返回 Lua 使用的总内存数。 这个值有小数部分,所以只需要乘上 1024 就能得到 Lua 使用的准确字节数(除非溢出)。

  3. collectgarbage("restart"): 重启垃圾收集器的自动运行。

  4. collectgarbage("setpause"): 将 arg 设为收集器的 间歇率。 返回 间歇率 的前一个值。

  5. collectgarbage("setstepmul"): 返回 步进倍率 的前一个值。

  6. collectgarbage("step"): 单步运行垃圾收集器。 步长"大小"由 arg 控制。 传入 0 时,收集器步进(不可分割的)一步。 传入非 0 值, 收集器收集相当于 Lua 分配这些多(K 字节)内存的工作。 如果收集器结束一个循环将返回 true 。

  7. collectgarbage("stop"): 停止垃圾收集器的运行。 在调用重启前,收集器只会因显式的调用运行。
    垃圾回注意回收时机就行

数据库连接

这个东西比较不重要应该是没有人去用lua操作数据库
大家可以可以使用对应的orm框架来操作
https://github.com/itdxer/4daysorm 这样一个开源框架能更好使用数据,不过orm框架要自己实现,本人实现了简单的crud,到时同时同步到博客

lua结束语:lua其实比较简单大致学一下就行,能给程序员工资加好多,还简单,可做嵌入式,游戏开发,ios,ios,Android,H5
可以依靠lua做一个简单的电视盒子软件,一个字cool!!!

go学习

  1. go语言出身华丽,谷歌出品,一经推出就比较火
  2. 兼具 Python 等动态语言的开发速度和 C/C++ 等编译型语言的性能与安全性
  3. go的薪资是比较高的,go语言是互联网大厂明星语言,特别现在都是服务上云,这样就让go更加的火爆
  4. 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框架&网络编程

中间件

太累了,不想写了.....

posted @ 2021-12-04 15:36  maskpd  阅读(537)  评论(0编辑  收藏  举报