他にたくさんあるけど
こんな感じの内容はたくさんあると思いますが、、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プログラミングをしようと思います。