Golangでアプリを書いてて、最初は設定内容もソースに直書きしてたけど、さすがにそろそろ設定を外出ししたくなってきた。
json形式のファイルで設定できるようにする
標準でjsonライブラリが存在してるので、設定ファイルの形式は、jsonを使うことにした。
Configという構造体を定義して、構造体のインスタンスに読み込むだけでいいらしい。
mapで受け取ることもできるけど、いちいちキャストが必要になるので、構造体を定義する方が
簡単だと思う。
package appconfig
import (
"os"
"io/ioutil"
"json"
"fmt"
)
// 設定ファイルの値を表現する構造体
type Config struct {
Id int
Name string
Array []int
}
// 設定ファイルを読み込む
func Parse(filename string) (Config, os.Error) {
var c Config
jsonString, err := ioutil.ReadFile(filename)
if err != nil {
fmt.Println("error" + err.String())
return c, err
}
err = json.Unmarshal(jsonString, &c)
if err != nil {
fmt.Println("error" + err.String())
return c, err
}
return c, nil
} |
package appconfig
import (
"os"
"io/ioutil"
"json"
"fmt"
)
// 設定ファイルの値を表現する構造体
type Config struct {
Id int
Name string
Array []int
}
// 設定ファイルを読み込む
func Parse(filename string) (Config, os.Error) {
var c Config
jsonString, err := ioutil.ReadFile(filename)
if err != nil {
fmt.Println("error" + err.String())
return c, err
}
err = json.Unmarshal(jsonString, &c)
if err != nil {
fmt.Println("error" + err.String())
return c, err
}
return c, nil
}
package main
import (
"./appconfig"
"fmt"
)
func main() {
conf, err := appconfig.Parse("./config.json")
if err != nil {
fmt.Println("error " + err.String())
}
fmt.Println(conf.Name)
fmt.Println(conf.Array[0])
} |
package main
import (
"./appconfig"
"fmt"
)
func main() {
conf, err := appconfig.Parse("./config.json")
if err != nil {
fmt.Println("error " + err.String())
}
fmt.Println(conf.Name)
fmt.Println(conf.Array[0])
}
default:
6g appconfig.go
6g main.go
6l main.6
#6g 6lは環境によって変更する |
default:
6g appconfig.go
6g main.go
6l main.6
#6g 6lは環境によって変更する
{
"Id": 1,
"Name": "json test",
"Array": [1, 2]
} |
{
"Id": 1,
"Name": "json test",
"Array": [1, 2]
}