GopherLuaを設定ファイルで使うライブラリを書きました

GopherLua で設定ファイルを書くためのライブラリを書きました。設定ファイル以外にも使えますけど。

モノとしてはGopherLuaのテーブルをGoの構造体にマップしてくれます。といっても、内部動作的にはHashicorpの mapstructure を使っているだけだったりします。一度GopherLuaのテーブルを map[string]interface{} に変換してあげて、あとはmapstructureにおまかせ。

ただ、一般的なLuaの命名規則とGoの命名規則が違うので名前を変換する関数が指定できます。デフォルトでは snake_caseCamelCase に変換します。

 1type Role struct {
 2    Name string
 3}
 4
 5type Person struct {
 6    Name      string
 7    Age       int
 8    WorkPlace string
 9    Role      []*Role
10}
11
12L := lua.NewState()
13if err := L.DoString(`
14person = {
15  name = "Michel",
16  age  = "31", -- weakly input
17  work_place = "San Jose",
18  role = {
19    {
20      name = "Administrator"
21    },
22    {
23      name = "Operator"
24    }
25  }
26}
27`); err != nil {
28    panic(err)
29}
30var person Person
31if err := gluamapper.Map(L.GetGlobal("person").(*lua.LTable), &person); err != nil {
32    panic(err)
33}
34fmt.Printf("%s %d", person.Name, person.Age)

のように非常に簡単にLuaを設定ファイルとして使うことができます。Luaは可読性が高く、JSONと異なりコメントが書けて、YAMLよりも簡単に値を変数化できるので設定ファイルにすると便利です(なんでも出来てしまう、というのがネックと言えばネックですが)。

comments powered by Disqus