首頁 >後端開發 >Golang >Golang - flag.Arg(0) 傳回 exec.cmd 傳遞的參數的索引 1 而不是索引 0

Golang - flag.Arg(0) 傳回 exec.cmd 傳遞的參數的索引 1 而不是索引 0

WBOY
WBOY轉載
2024-02-10 14:39:08551瀏覽

Golang - flag.Arg(0) 返回 exec.cmd 传递的参数的索引 1 而不是索引 0

Golang是一種快速、有效率、可靠的程式語言,而flag.Arg(0)是Golang中常用的函數,用來傳回exec.cmd傳遞的參數的索引1。然而,php小編子墨指出,這個函數的行為與預期不符,實際上它回傳的是索引1而不是索引0。這個問題可能導致程式在處理參數時出現錯誤。在本文中,我們將解釋這個問題的原因,並提供解決方案,幫助開發者正確使用flag.Arg(0)函數。

問題內容

我目前的 bar 應用程式中有一些看起來像這樣的內容

flag.parse()
str := flag.arg(0)
fmt.println(str)

現在在我的 foo 應用程式中我有這樣的東西

var stdout, stderr bytes.Buffer
    cmd := exec.Cmd{
        Path:   c.Path,
        Args:   c.Args,
        Env:    c.Env,
        Stdin:  bytes.NewReader(b),
        Stdout: &stdout,
        Stderr: &stderr,
    }

    if err := cmd.Start(); err != nil {
        return err
    }

現在上面的c.args = [1,2,3]

foo 程式嘗試呼叫 bar 程序,bar 顯示 2 如何讓欄顯示 1。

我知道 flag.parse 忽略第一個參數。如何使用 flag.arg() 讀取第一個參數(索引 0)

解決方法

#cmd.args 包含指令名稱。 flag.arg(0) 是指令名稱和標誌之後的第一個參數。

透過將命令名稱新增至 cmd.args 來修復。

cmd := exec.Cmd{
    Path:   c.Path,
    Args:   append([]string{c.Path}, c.Args...),
    Env:    c.Env,
    Stdin:  bytes.NewReader(b),
    Stdout: &stdout,
    Stderr: &stderr,
}

以上是Golang - flag.Arg(0) 傳回 exec.cmd 傳遞的參數的索引 1 而不是索引 0的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除