m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

go言語でflagを使用したパラメータ指定を行う

flagパッケージ

./sample1 -user hogehoge

みたいな感じで項目名にあったパラメータを渡す処理
http://golang-jp.org/pkg/flag/

とにかく実装

sample1.go
package main

import (
    "log"
    "flag"
    "os"
)

// 引数取得エリア
type ParamItem struct {
    Url   string
    Count int
    User  string
    Pass  string
}

// 引数を指定して値を受け取る処理
func main() {
    // 処理開始
    log.Println("start")

    param := new(ParamItem)

    //
    flagObj := flag.NewFlagSet(os.Args[0], flag.ExitOnError)

    // 引数を登録
    flagObj.StringVar(&param.Url, "url", "", "URLを設定してください。")
    flagObj.StringVar(&param.User, "user", "", "ユーザ名を設定してください。")
    flagObj.StringVar(&param.Pass, "pass", "", "パスワードを設定してください。")

    // パース処理
    flagObj.Parse(os.Args[1:])
    for 0 < flagObj.NArg() {
        flagObj.Parse(flagObj.Args()[1:])
    }

    log.Println("url  = " + param.Url)
    log.Println("user = " + param.User)
    log.Println("pass = " + param.Pass)

    // 処理終了
    log.Println("end")
}

$ go run sample1.go -url http://hogehoge.com -user aaa -pass 1234
2017/10/28 17:29:07 start
2017/10/28 17:29:07 url  = http://hogehoge.com
2017/10/28 17:29:07 user = aaa
2017/10/28 17:29:07 pass = 1234
2017/10/28 17:29:07 end
$

ヘルプコマンドの場合

$ go run sample1.go -help
2017/10/28 17:29:46 start
  -pass string
    	パスワードを設定してください。
  -url string
    	URLを設定してください。
  -user string
    	ユーザ名を設定してください。
exit status 2
$

順番ってキー名の昇順?

所感

項目名と連動するので引数で何が必要かなどの指定を用意しやすい。
設定ファイルでの読み込みと合わせて行えば役に立ちそう