- Golang を勉強中であります
— 以下の点について勉強しました
— 出来たもの - 以下のように使う
— 環境
— ヘルプ
— dateを 1 秒毎に 5 回実行
— date を 3 秒ごとに 3 回実行 - まとめ
— コマンドの実行(実行結果もしくは実行エラーも取得したい場合)
— 配列を含んだ JSON の生成
— 以上
Golang を勉強中であります
以下の点について勉強しました
- Golang で配列を含んだ JSON の生成について
- Golang でコマンドの実行と結果の取得方法
出来たもの
以下のように使う
環境
$ sw_vers ProductName: Mac OS X ProductVersion: 10.11.6 BuildVersion: 15G1421 $ go version go version go1.8.3 darwin/amd64
ヘルプ
$ ./cmdRunner -help Usage of ./cmdRunner: -command string Specify a Command. -interval int Specify a Wait Interval Times. (default 3) -times int Specify a Loop Counts Number. (default 1)
date を 1 秒毎に 5 回実行
$ ./cmdRunner -command="date +%Y%m%d-%H:%M:%S" -times=5 -interval=1 | jq . { "outputs": [ "20170718-07:56:55", "20170718-07:56:56", "20170718-07:56:57", "20170718-07:56:58", "20170718-07:56:59" ] }
date を 3 秒ごとに 3 回実行
$ ./cmdRunner -command="date +%Y%m%d-%H:%M:%S" -times=3 -interval=3 | jq . { "outputs": [ "20170718-07:57:54", "20170718-07:57:57", "20170718-07:58:00" ] }
まとめ
コマンドの実行(実行結果もしくは実行エラーも取得したい場合)
CombinedOutput()
を利用すると良いらしい。
func runCommand(command string) (output string){ cmd := exec.Command("sh", "-c", command) stdout, err := cmd.CombinedOutput() output = strings.TrimRight(string(stdout), "\n") if err != nil { errMessage := err.Error() + ": " + output log.Printf(string(errMessage)) return output } return output }
配列を含んだ JSON の生成
// 配列を含んだ JSON の構造体を定義 type OutputMessages struct { Outputs []string `json:"outputs"` } ... // JSON オブジェクトを生成 outputMessage := OutputMessages{Outputs: []string(stdouts)} // Marshal 関数を利用して JSON を生成 jsonBytes, err := json.Marshal(outputMessage)
以上
メモでした。