スクリプトのお勉強

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

-スクリプトのお勉強

執筆者:

関連記事

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

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

gradleのcommandLineでリダイレクト

gradleというビルドツールがあります。なぜかRPMを作成するのに使ってます。Ansibleも使ってるんですがね。。 それはともかく、ここの通りなのですが、例えばls -lRの出力を、プロジェクトデ …

使えるチートシート一覧

チートシートとは 普段使うコードとか、よく忘れやすい、コピペするコードを集めた情報です。 自分が使う言語のチートシートを書いておきます。 チートシート集 URL内容https://github.com …

PythonでAESを使用して暗号/復号する

1.つづき Pythonで、PKCS#12の公開鍵で暗号、秘密鍵で復号するプログラムの続きです。 今回はAESで暗号化/復号を行い、通信しながらRSA暗号/復号,AES暗号/復号を組み合わせたいと思い …

Markdown to HTML(grip)

1.はじめに 最近の文書はほとんどMarkdownで書くのですが、それをHTMLに変換する方法を調べました。 ただし、私がMarkdownと思っている文法は「github-flavored-markd …

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