スクリプトのお勉強

go 1.16 でviperを使って設定ファイルを読みだすプログラムを作ってみた

投稿日:

他にたくさんあるけど

こんな感じの内容はたくさんあると思いますが、、goの初心者がなんとなく
goの手習いとして、まずは設定ファイルを読みだすことをしてみようと思いました。

go動作環境

  • windows 10 Home
  • Visual Studio Code
  • go 1.16

goを何も設定されてないところから

以下の感じで出来るようにしました。

  • https://golang.org/doc/install
    からダウンロードしてインストール
    インストールディレクトリはデフォルトのまま
  • 以下でgo/src/samplepにmain.goとconfig.ymlを格納する
$ cd %HOMEPATH%/go/src
$ mkdir samplep
$ go mod init
$ go get github.com/spf13/viper
$ go run ./main.go

main.go

main.goは以下の通りです。

package main

import (
    "flag"
    "fmt"

    "github.com/spf13/viper"
)

func main() {
    var (
        c = flag.String("config", "config.yml", "config file")
    )
    flag.Parse()
    var yamlconfig = loadConfigForYaml(*c)
    fmt.Println(yamlconfig.Node)
}

type appConfig struct {
    Node []struct {
        Name string
        URL  string
    }
}

func loadConfigForYaml(configFile string) *appConfig {
    v := viper.New()
    v.SetConfigType("yaml")
    v.SetConfigName(configFile)
    v.AddConfigPath(".")

    if err := v.ReadInConfig(); err != nil {
        fmt.Println("config read error !!!")
        fmt.Println(err)
    }
    conf := &appConfig{}
    if err := v.Unmarshal(conf); err != nil {
        fmt.Println("config file Unmarshal error")
        fmt.Println(err)
    }
    return conf
}

go言語を眺めるだけでなく、久しぶりに書いてみたのですが、まだ文法がよく分かってません。。

単なる感想ですが、Pythonに慣れてると、いまいち融通が効かず、使いづらいです。。

config.yml

読みだす内容は以下の通りです。

---
node:
  - name: 'local-ubuntu'
    url: 'http://192.168.132.128:9100'
  - name: 'VPS'
    url: 'http://192.168.208.111:9100'

実行結果

実行結果は以下になります。

> go run .\main.go
[{local-ubuntu http://192.168.132.128:9100} {VPS http://192.168.208.111:9100}
> go build ./main.go
-a----        2021/02/21     18:21        5856768 main.exe

終わりに

もちろんこれはgoのコンパイルができるか確かめただけです。それでも結構かかりました。。

この次は、Windows GUIプログラミングをしようと思います。

-スクリプトのお勉強

執筆者:

関連記事

小ネタ: Python のdataclass でNone or “”を使わないJSONデータを定義する

PythonをREST APIのクライアントとして作成する際、dataclassesを使用しようと思いました。型が見た瞬間分かるし、しっかりしているからです。 でも、そのREST API は&#822 …

Certbot(snap版)の起動が失敗した件

certbotの起動が失敗した 小ネタです。 なぜかSSL証明書が更新されず、Let’s Encrypt Expiry Botからたくさんメールが来るなーと思ったらcertbotの起動が失 …

Selenium + Python によるアップロードアプリの動作確認プログラム作成

私の周りでは、なぜかSeleniumが流行っている模様です。 私自身は、Webアプリ的なのも作ってますが、あまり使ってなかったので、使ってみようと思います。 前回作成した、Djangoのupload_ …

seaborn + Pandas + Python によるグラフ描画(その1: 準備編)

グラフ描画してみよう 今現在の仕事で、グラフ描画する可能性があるので、少し練習してみようと思います。 題材について 突然ですが、私は確定拠出型年金に加入しています。証券会社はSBI証券 にしています。 …

(小ネタ) Python3 で読み出すのが一番早いデータフォーマットは?

仕事のネタで、Python3(Django)の設定ファイルをreloadしたい、というのがあります。 つまり設定ファイルをちょこちょこ変更するが、その変更のたびにサービスをリスタートするのではなく設定 …

google オプトアウト Click here to opt-out.