2010-04-25 4 views
60

이동에서 명령 줄 인수에 액세스하려면 어떻게합니까? 그들은 main에 인수로 전달되지 않습니다. Go 프로그램에 전달 된 명령 줄 인수에 액세스하는 방법?

가능한 여러 패키지를 연결하여 만든 완전한 프로그램,

은 정의 된 함수

func main() { ... } 

으로, 주요이라는 하나 개의 패키지가 있어야합니다. main.main() 함수는 인수를 취하지 않고 값을 반환하지 않습니다.

+0

나는'flag' 내장 Golang 모듈을 볼 것입니다. 그것은 더 쉽게'os.Args'의 파싱을 만듭니다. –

+0

또한, "반환 값이 없습니다", 호출 프로세스에 특정 종료 코드를 반환하기 위해'os.Exit()'를 호출 할 수 있습니다. –

답변

80

os.Args 변수를 사용하여 명령 줄 인수에 액세스 할 수 있습니다. 예를 들어,

package main 

import (
    "fmt" 
    "os" 
) 

func main() { 
    fmt.Println(len(os.Args), os.Args) 
} 

는 또한 명령 줄 플래그 구문 분석을 구현하는 flag package를 사용할 수 있습니다.

10

명령 줄 인수는 os.Args에서 찾을 수 있습니다. 대부분의 경우 패키지 flag이 더 나은 이유는 인수 구문 분석을 수행하기 때문입니다.

6

피터의 대답은 정확히 인수 목록을 원한다면 필요한 것입니다.

그러나 UNIX에있는 것과 비슷한 기능을 찾고 있다면 go implementationdocopt으로 사용할 수 있습니다. 당신은 그것을 시도 할 수 here.

docopt는 JSON을 반환하므로 사용자는 마음의 내용을 처리 할 수 ​​있습니다.

+0

@ 아래 유권자 왜? – Carl

+1

아마도 필요가 너무 강한 단어입니다. "그때 할 수있는"것이 좋습니다. –

+0

공정한 의견. 답변이 업데이트되었습니다. – Carl

2

플래그는 좋은 패키지입니다.

// [_Command-line flags_](http://en.wikipedia.org/wiki/Command-line_interface#Command-line_option) 
// are a common way to specify options for command-line 
// programs. For example, in `wc -l` the `-l` is a 
// command-line flag. 

package main 

// Go provides a `flag` package supporting basic 
// command-line flag parsing. We'll use this package to 
// implement our example command-line program. 
import "flag" 
import "fmt" 

func main() { 

    // Basic flag declarations are available for string, 
    // integer, and boolean options. Here we declare a 
    // string flag `word` with a default value `"foo"` 
    // and a short description. This `flag.String` function 
    // returns a string pointer (not a string value); 
    // we'll see how to use this pointer below. 
    wordPtr := flag.String("word", "foo", "a string") 

    // This declares `numb` and `fork` flags, using a 
    // similar approach to the `word` flag. 
    numbPtr := flag.Int("numb", 42, "an int") 
    boolPtr := flag.Bool("fork", false, "a bool") 

    // It's also possible to declare an option that uses an 
    // existing var declared elsewhere in the program. 
    // Note that we need to pass in a pointer to the flag 
    // declaration function. 
    var svar string 
    flag.StringVar(&svar, "svar", "bar", "a string var") 

    // Once all flags are declared, call `flag.Parse()` 
    // to execute the command-line parsing. 
    flag.Parse() 

    // Here we'll just dump out the parsed options and 
    // any trailing positional arguments. Note that we 
    // need to dereference the pointers with e.g. `*wordPtr` 
    // to get the actual option values. 
    fmt.Println("word:", *wordPtr) 
    fmt.Println("numb:", *numbPtr) 
    fmt.Println("fork:", *boolPtr) 
    fmt.Println("svar:", svar) 
    fmt.Println("tail:", flag.Args()) 
}