いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Goメモ-199 (*exec.Cmd 実行時にコマンドの引数指定にスライスを使う)

概要

以下自分用のメモです。よく忘れるのでここにメモメモ。。。

別に (*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

参考情報


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。