GopherLua で設定ファイルを書くためのライブラリを書きました。設定ファイル以外にも使えますけど。
モノとしてはGopherLuaのテーブルをGoの構造体にマップしてくれます。といっても、内部動作的にはHashicorpの mapstructure を使っているだけだったりします。一度GopherLuaのテーブルを map[string]interface{}
に変換してあげて、あとはmapstructureにおまかせ。
ただ、一般的なLuaの命名規則とGoの命名規則が違うので名前を変換する関数が指定できます。デフォルトでは snake_case
を CamelCase
に変換します。
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よりも簡単に値を変数化できるので設定ファイルにすると便利です(なんでも出来てしまう、というのがネックと言えばネックですが)。