golangでiniファイルを読み込むとき用テンプレートプロジェクト

2021-02-23

golangでiniファイルを読み込むサンプル

アプリで利用する設定値やAPIキーなどプログラムの中に埋め込みたくニーズがあると思います。 今回は、golangからAPIキーを別ファイルに記載し読み込むテンプレートを紹介したいと思います。 bitflyerのAPIキーを操作するための準備として本記事を執筆します。

ファイル構成

E:.
│  Config.ini
│  go.mod
│  go.sum
│  Trade.go
│
└─Config
        Config.go

初期ファイル作成

作り方は何でも良いがとりあえず

mkdir Config
touch Config.ini
touch Trade.go
touch Config/Config.go

mod 作成

go mod init config

modファイルとsumファイルを作成します。

Config.ini

ファイルの中身にはこのように記載します。

[bitflyer]
api_key = XXXXXX
api_secret = XXXXXXXXXXXXXXXXX

XXXXには実際に利用するサービスのAPIキーやシークレットキーを記載します。

config.go

iniファイルを読み込み、構造体に詰め込む部分を記載します。

コード全体は下記の通り

package config

import (
    "log"
    "os"

    "gopkg.in/ini.v1"
)

type ConfigList struct {
    ApiKey    string
    ApiSecret string
}

var Config ConfigList

func init() {
    cfg, err := ini.Load("config.ini")
    if err != nil {
        log.Printf("Failed to read file: %v", err)
        os.Exit(1)
    }

    Config = ConfigList{
        ApiKey:    cfg.Section("bitflyer").Key("api_key").String(),
        ApiSecret: cfg.Section("bitflyer").Key("api_secret").String(),
    }
}

iniファイルをロードし、取り込み失敗時にはerrによりソフトが終了する部分。

    cfg, err := ini.Load("config.ini")
    if err != nil {
        log.Printf("Failed to read file: %v", err)
        os.Exit(1)
    }

定義した構造体の中身にiniファイルの中身を記載する箇所。 Sectionにはiniファイルで定義した []の中身に書いてあるセクション名を記載する。 Keyについてはセクションに含まれる要素に当たる、それぞれの名称を記載する。

    Config = ConfigList{
        ApiKey:    cfg.Section("bitflyer").Key("api_key").String(),
        ApiSecret: cfg.Section("bitflyer").Key("api_secret").String(),
    }

Trade.go

自前で作成したconfigをパッケージとして読み込んでいます。 特に何も変わった部分はないですが… printlnでiniファイルの中身を表示します。

package main

import (
    "fmt"

    "config/config"
)

func main() {
    fmt.Println(config.Config.ApiKey)
    fmt.Println(config.Config.ApiSecret)
}

まとめ

最初どのぐらいの記事を書いていくのか全く定まっていないですが 当面は、自動取引ツールでも作っていく過程を小出しに記事にしようかと思います。