m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

go言語でjson形式の設定ファイルを読み込む

実行する際の変数の外出

設定ファイルにして配置しておくとやりやすいので対応する。

前提

設定ファイルはjson

実装

config.json
{
    "url": "http://hogehoge.com",
    "count": 100,
    "user": "hoge",
    "pass": "foo"
}
sample1.go
package main

import (
    "log"
    "os"
    "io/ioutil"
    "encoding/json"
    "strconv"
)

// jsonの設定ファイルを読み込むサンプル
func main() {
    // 処理開始
    log.Println("start")

    jsonString, err := ioutil.ReadFile("config.json")
    if err != nil {
        log.Println(err)
        os.Exit(1)
    }

    // config.jsonの中身を出力
    // そのままだとbyteデータになるのでstringに変換
    log.Println(string(jsonString))

    // 構造体定義
    type Config struct {
        Url   string  `json:"url"`
        Count int     `json:"count"`
        User  string  `json:"user"`
        Pass  string  `json:"pass"`
    }

    // 設定変数用意
    c := new(Config)

    // 設定
    err = json.Unmarshal(jsonString, c)
    if err != nil {
        log.Println(err)
        os.Exit(2)
    }

    // 結果出力
    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")
}

$ go run sample1.go
2017/10/28 14:32:33 start
2017/10/28 14:32:33 {
    "url": "http://hogehoge.com",
    "count": 100,
    "user": "hoge",
    "pass": "foo"
}


2017/10/28 14:32:33 url   = http://hogehoge.com
2017/10/28 14:32:33 count = 100
2017/10/28 14:32:33 user  = hoge
2017/10/28 14:32:33 pass  = foo
2017/10/28 14:32:33 end
$

注意点

構造体に設定する際はフィールドの項目は外部公開できるように1文字目を大文字にしておくこと
そうしないと構造体のデータに設定されてくれない