スクリプトのお勉強

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

-スクリプトのお勉強

執筆者:

関連記事

Markdown to HTML(grip)

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

Python3でsnmptrapの受送信をしてみる

はじめに 私はなんちゃってプログラマですが、なぜかいまどきsnmptrapの受信プログラムを作ることになりました。 なんだかなと思いますが、、まぁブログネタにいいかなと思い、手元でもやってみることにし …

MySQL MCP Serverを設定/動作確認してみる

はじめに 今はやりの生成AIとして、LLM(ローカルAPI)とMySQLのMCP Serverを使用してチャットシステムを作ろうと思います。 その前に、前回作成したDBへのMySQL MCP Serv …

Nuxt.js – CRUDアプリケーションのフォーム/一覧を作成する

前回で作ったAPIのフロントエンドアプリケーションを作ろうと思います。 どういうアプリ? サンプルとして作ったAPIが住所録的だったので、住所録を作りました。 以下の機能があります。 登録(確認付き) …

Mojolicious XML-RPC Pluginの開発(2)

はじめに 「Mojolicious XML-RPC Pluginの開発」のその2です。 本内容では、前回の内容を踏まえ、XML-RPC実装を、Mojoliciousのプラグイン機能を使用して実装しよう …

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