概要
以下自分用のメモです。よく忘れるのでここにメモメモ。。。
別に (*exec.Cmd) 専用でもなんでもないのですが、コマンド引数を指定する際に引数のリストをスライスで持っている場合、go の three dot (...) の機能を使って、そのまま渡せますというメモです。
サンプル
package cmdexec import ( "fmt" "os/exec" "github.com/devlights/gomy/output" ) // WithSlice -- *exec.Cmd 実行時にスライスの値をコマンドの引数で指定するサンプルです. // // REFERENCES // - https://dev.to/tobychui/quick-notes-for-go-os-exec-3ejg func WithSlice() error { var ( cmd *exec.Cmd out []byte err error ) var ( p = []string{ "hello", "world", "こんにちわ", "世界", } ) cmd = exec.Command("echo", p...) out, err = cmd.CombinedOutput() if err != nil { return fmt.Errorf("%w (%s)", err, out) } output.Stdoutf("[cmd]", "%s", out) return nil }
実行すると以下のようになります。
gitpod /workspace/try-golang (master) $ make run go run -race main.go -onetime -example "" ENTER EXAMPLE NAME: cmdexec_slice [Name] "cmdexec_slice" [cmd] hello world こんにちわ 世界 [Elapsed] 2.00746ms
参考情報
- 3 dots in 4 places · YourBasic Go
- Quick Notes for Go os/exec - DEV Community
- exec package - os/exec - pkg.go.dev
過去の記事については、以下のページからご参照下さい。
サンプルコードは、以下の場所で公開しています。