Heim  >  Artikel  >  Backend-Entwicklung  >  Golang – flag.Arg(0) gibt Index 1 des von exec.cmd übergebenen Arguments anstelle von Index 0 zurück

Golang – flag.Arg(0) gibt Index 1 des von exec.cmd übergebenen Arguments anstelle von Index 0 zurück

WBOY
WBOYnach vorne
2024-02-10 14:39:08519Durchsuche

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

Golang ist eine schnelle, effiziente und zuverlässige Programmiersprache, und flag.Arg(0) ist eine häufig verwendete Funktion in Golang, die verwendet wird, um den Index 1 des von exec.cmd übergebenen Parameters zurückzugeben. Allerdings wies PHP-Redakteur Zimo darauf hin, dass das Verhalten dieser Funktion nicht wie erwartet sei und sie tatsächlich Index 1 statt Index 0 zurückgibt. Dieses Problem kann zu Fehlern bei der Verarbeitung von Parametern durch das Programm führen. In diesem Artikel erklären wir die Ursache dieses Problems und stellen Lösungen bereit, die Entwicklern helfen, die Funktion flag.Arg(0) korrekt zu verwenden.

Frageninhalt

Ich habe einige Inhalte in meiner aktuellen barApp, die so aussehen

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

Jetzt habe ich in meiner Foo-App so etwas

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
    }

Jetzt c.args oben = [1,2,3]

foo-Programm versucht, das Bar-Programm aufzurufen, Bar zeigt 2 an So stellen Sie die Spaltenanzeige ein 1.

Ich weiß, dass flag.parse das erste Argument ignoriert. So lesen Sie das erste Argument (Index 0) mit flag.arg() flag.parse 忽略第一个参数。如何使用 flag.arg() 读取第一个参数(索引 0)

解决方法

cmd.args 包含命令名称。 flag.arg(0)

Workaround

cmd.args

Geben Sie den Befehlsnamen an. flag.arg(0) ist das erste Argument nach dem Befehlsnamen und dem Flag. 🎜 🎜Behoben durch Hinzufügen des Befehlsnamens zu 🎜. 🎜
cmd := exec.Cmd{
    Path:   c.Path,
    Args:   append([]string{c.Path}, c.Args...),
    Env:    c.Env,
    Stdin:  bytes.NewReader(b),
    Stdout: &stdout,
    Stderr: &stderr,
}

Das obige ist der detaillierte Inhalt vonGolang – flag.Arg(0) gibt Index 1 des von exec.cmd übergebenen Arguments anstelle von Index 0 zurück. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen