1つのファイルの場合
はメンテしづらいので分割する
ファイル構成
. ├── config │ └── appconfig.go ├── config.json └── sample2.go
こんな感じ
実装
config.json
{ "url": "http://hogehoge.com", "count": 100, "user": "hoge", "pass": "foo" }
config/appconfig.go
package config import ( "io/ioutil" "encoding/json" ) // 構造体定義 type Config struct { Url string `json:"url"` Count int `json:"count"` User string `json:"user"` Pass string `json:"pass"` } // configファイルを読み込み構造体へ割当 func Read(filename string) (*Config, error) { // 構造体を定義 c := new(Config) // 設定ファイルを読み込む jsonString, err := ioutil.ReadFile(filename) if err != nil { // エラー return c, err } // 設定 err = json.Unmarshal(jsonString, c) if err != nil { // エラー return c, err } // 正常 return c, nil }
sample2.go
package main import ( "log" "os" "strconv" "./config" ) // jsonの設定ファイルを読み込むサンプル func main() { // 処理開始 log.Println("start") // 構造体へconfigの結果を設定 c, err := config.Read("config.json") if err != nil { log.Println(err) os.Exit(1) } // 結果出力 log.Println("url = " + c.Url) log.Println("count = " + strconv.Itoa(c.Count)) log.Println("user = " + c.User) log.Println("pass = " + c.Pass) // 処理終了 log.Println("end") }
所感
うん、まあそれなりにスッキリした感じです。
構造体の場合は値渡しか参照渡しとなるかをきちんと考える必要がある