Maison >développement back-end >Golang >Comment utiliser Golang Lua

Comment utiliser Golang Lua

(*-*)浩
(*-*)浩original
2019-12-13 13:30:053650parcourir

Comment utiliser Golang Lua

Il existe une machine virtuelle Lua écrite en golang sur github, appelée gopher-lua.

L'auteur a expliqué dans le document la correspondance entre les types de données dans Lua et les types de données dans Golang. Il est à noter que le type commence par L et le nom du type commence par LT. . (Apprentissage recommandé : go)

Pour convertir des données en golang en données en lua, il faut les convertir en un type commençant par L :

str := "hello"
num := 10
L.LString(str)
L.LNumber(float64(num))

Les données en lua sont converti en Pour les données en golang, le projet fournit des fonctions telles que ToInt et CheckString pour la conversion, mais le type doit être connu à l'avance. Si vous ne le savez pas, vous devez effectuer un jugement de type :

value := L.Get(1)
switch value.Type() {
case lua.LTString:
case lua.LTTable:
....
}

Vous pouvez. utilisez également gopher ici -luar pour faciliter la conversion de type

golang et lua s'appellent mutuellement

La fonction en golang doit être convertie en func(L *lua.State. ) int this Ce formulaire peut être injecté dans Lua. L'int du paramètre de retour représente le nombre de paramètres de retour.

func hello(L *lua.State) int {
     //将返回参数压入栈中
     L.Push(lua.LString("hello"))
     //返回参数为1个
     return 1
}
//注入lua中
L.SetGlobal("hello", L.NewFunction(hello))

Pour appeler la fonction Lua en golang, vous devez d'abord définir cette fonction dans le script Lua. , puis appelez CallByParam :

//先获取lua中定义的函数
fn := L.GetGlobal("hello")
if err := L.CallByParam(lua.P{
    Fn: fn,
    NRet: 1,
    Protect: true,
    }, lua.LNumber(10)); err != nil {
    panic(err)
}
//这里获取函数返回值
ret := L.Get(-1)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn