Go의 argv [0]에 해당하는 것은 무엇입니까?


103

런타임에 내 프로그램의 이름을 어떻게 얻을 수 있습니까? Go가 C / C ++의 argv [0]에 해당하는 것은 무엇입니까? 나에게 올바른 이름으로 사용법을 생성하는 것이 유용합니다.

업데이트 : 일부 코드를 추가했습니다.

package main

import (
    "flag"
    "fmt"
    "os"
)

func usage() {
    fmt.Fprintf(os.Stderr, "usage: myprog [inputfile]\n")
    flag.PrintDefaults()
    os.Exit(2)
}

func main() {
    flag.Usage = usage
    flag.Parse()

    args := flag.Args()
    if len(args) < 1 {
        fmt.Println("Input file is missing.");
        os.Exit(1);
    }
    fmt.Printf("opening %s\n", args[0]);
    // ...
}

2
flag.Args()여기 에서 길이를 감지하는 대신 사용할 수 있습니다flag.NArg()
Keith Smiley

2
정답은 os.Args[]아닙니다 flag.Args(). 플래그 패키지는와 같은 명령 줄 인수를 구문 분석하기위한 -this -that것이며 flag.Args()구문 분석되지 않은 나머지 인수를 반환합니다. 여기에 예가 있습니다 : play.golang.org/p/_YtTcqLWnl
fiorix

답변:


145
import "os"
os.Args[0] // name of the command that it is running as
os.Args[1] // first command line parameter, ...

인수는 http://golang.org/pkg/os/#Variablesos 패키지에 표시됩니다.

인수 처리를 수행하려는 경우 http://golang.org/pkg/flagflag 패키지 가 선호되는 방법입니다. 특히 귀하의 경우flag.Usage

제공 한 예에 대한 업데이트 :

func usage() {
    fmt.Fprintf(os.Stderr, "usage: %s [inputfile]\n", os.Args[0])
    flag.PrintDefaults()
    os.Exit(2)
}

트릭을해야한다


나는 그것을 깃발로 얻는 방법을 알아낼 수 없었고 os에 그 정보가 있다는 것을 알지 못했습니다. 감사.
grokus 2010-07-28

1
경고- "go run"을 통해 프로그램을 호출하는 경우이 기술을 사용하지 마십시오. 자동 생성 된 a.out이 표시됩니다.
Brad Clawsie 2013 년

11
@bradclawsie 당신은 실행 파일의 이름이기 때문에 a.out을 얻습니다. 동작은 여전히 ​​올 바릅니다.
cthom06 2013 년

16

os 패키지 os.Args[0]에서 사용

package main
import "os"
func main() {
    println("I am ", os.Args[0])
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.