スクリプトのお勉強

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プログラミングをしようと思います。

-スクリプトのお勉強

執筆者:

関連記事

no image

GLP-1 メディカルダイエット 58日目

メディカルダイエットして58日目の記録をしておこうと思います。 9回目。 今回は左腹(中部)に打ちました。痛いのはいまだに慣れない。。 土曜にゲットしてした 渋谷に行ってきたが、そこの医院には相変わら …

JSON/YAMLファイル読み込み用ライブラリ比較(Python3)

はじめに Python3でプログラムを作る際、YAML/JSONを読みだす処理を多く作成します。そうすると、データが長く、そして複雑になる時があります。 ネストしてるデータを読みだすと以下のように a …

Python3 – VCR.py でネットワーク系テストを簡単に作成する

1. 始めに python3で実装すると、モックテストをしたくなります。モックを使って、比較的簡単にテストできるからです。 問題はネットワーク系テスト モックテストで問題になるのは、外部に依存するテス …

顔画像のモザイク方法(python + OpenCV + face_recognition)

Python3での顔画像モザイク方法 python3での顔画像モザイクの方法を調べてみました。 仕事とは関係なく、単なる趣味だったりしますが。。 この内容で、Djangoと統合する予定です。 Open …

Python Django REST Framework(REST API)の作成

1.はじめに 今回は、pythonの「Django」というWebアプリケーションフレームワークを使用し、REST APIを作成します。作成するREST APIは、これから作るであろう、Nuxt.jsか …

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