गो-प्रोग्राम में दिए गए कमांड-लाइन तर्कों तक कैसे पहुँचें?


88

मैं गो में कमांड-लाइन तर्कों का उपयोग कैसे करूं? वे तर्क के रूप में पारित नहीं हुए हैं main

एक पूरा कार्यक्रम, जो संभवतः कई पैकेजों को जोड़कर बनाया गया है, में एक फ़ंक्शन के साथ मुख्य नामक एक पैकेज होना चाहिए

func main() { ... }

परिभाषित। फ़ंक्शन main.main () कोई तर्क नहीं लेता है और कोई मूल्य नहीं देता है।


मैं flagबिल्ट-इन गोलंग मॉड्यूल देखूंगा। यह os.Argsथोड़ा आसान बनाता है
मेटेज

इसके अलावा, फिर से: "रिटर्न नो वैल्यू", ध्यान दें कि आप os.Exit()कॉलिंग प्रक्रिया के लिए एक विशिष्ट निकास कोड वापस करने के लिए कॉल कर सकते हैं।
मार्क रीड

जवाबों:


113

आप os.Argsचर का उपयोग करके कमांड-लाइन तर्कों तक पहुंच सकते हैं । उदाहरण के लिए,

package main

import (
    "fmt"
    "os"
)

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

आप फ्लैग पैकेज का भी उपयोग कर सकते हैं , जो कमांड-लाइन फ्लैग पार्सिंग को लागू करता है।


11

कमांड लाइन तर्क os.Args में पाए जा सकते हैं । ज्यादातर मामलों में हालांकि पैकेज का झंडा बेहतर होता है क्योंकि यह आपके लिए तर्क देता है।


9

उसके लिए झंडा एक अच्छा पैकेज है।

// [_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())
}


7

पीटर का जवाब ठीक वही है जो आपको चाहिए अगर आप सिर्फ तर्कों की एक सूची चाहते हैं।

हालाँकि, यदि आप UNIX पर मौजूद समान कार्यक्षमता की तलाश कर रहे हैं, तो आप डॉकॉप्ट के गो कार्यान्वयन का उपयोग कर सकते हैं । आप इसे यहाँ आज़मा सकते हैं

docopt JSON को लौटाएगा जिसे आप तब अपने दिल की सामग्री पर संसाधित कर सकते हैं।


1
संभवतः जरूरत एक शब्द की भी मजबूत है। अनुशंसा करें "फिर आप कर सकते हैं"।
मैट जॉइनर

7

शीघ्र जवाब:

package main

import ("fmt"
        "os"
)

func main() {
    argsWithProg := os.Args
    argsWithoutProg := os.Args[1:]
    arg := os.Args[3]
    fmt.Println(argsWithProg)
    fmt.Println(argsWithoutProg)
    fmt.Println(arg)
}

परीक्षा: $ go run test.go 1 2 3 4 5

बाहर:

[/tmp/go-build162373819/command-line-arguments/_obj/exe/modbus 1 2 3 4 5]
[1 2 3 4 5]
3

नोट : os.Argsकच्चे कमांड-लाइन तर्कों तक पहुँच प्रदान करता है। ध्यान दें कि इस स्लाइस में पहला मान प्रोग्राम का पथ है, और प्रोग्राम के os.Args[1:]लिए तर्क रखता है। संदर्भ


0

आप उदाहरण के लिए गोलांग ध्वज पैकेज का उपयोग कर सकते हैं,

package main

import (
    "flag"
    "fmt"
)

func main() {

    wordPtr := flag.String("word", "default value", "a string for description")
    flag.Parse()
    fmt.Println("word:", *wordPtr)

}

cli के साथ कॉल करें

 go run main.go -word=hello
 
 

उत्पादन

word: hello
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.