2013-11-04 7 views
14

में पार्स करने मुझे यकीन है कि मैं इस उदाहरण (here से लिया गया) के पीछे तर्क समझ में नहीं हूँ, और न ही यह क्या जाओ भाषा के बारे में बातचीत करने के लिए कोशिश कर रहा है:करें कमांड लाइन golang

package main 

import (
    "flag" 
    "fmt" 
) 

func main() { 
    f := flag.NewFlagSet("flag", flag.ExitOnError) 
    f.Bool("bool", false, "this is bool flag") 
    f.Int("int", 0, "this is int flag") 

    visitor := func(a *flag.Flag) { 
     fmt.Println(">", a.Name, "value=", a.Value) 
    } 

    fmt.Println("Visit()") 
    f.Visit(visitor) 
    fmt.Println("VisitAll()") 
    f.VisitAll(visitor) 

    // set flags 
    f.Parse([]string{"-bool", "-int", "100"}) 

    fmt.Println("Visit() after Parse()") 
    f.Visit(visitor) 
    fmt.Println("VisitAll() after Parse()") 
    f.VisitAll(visitor) 
} 

पंक्तियों के साथ कुछ उनके सेटअप के बाद, लेकिन

int_val := f.get("int") 

नामित तर्क प्राप्त करने के लिए और अधिक उपयोगी लग रहा है। मैं जाने के लिए पूरी तरह से नया हूं, इसलिए बस भाषा से परिचित होने की कोशिश कर रहा हूं।

+2

https://gobyexample.com/command-line-flags एक महान उदाहरण है। – elithrar

+0

यदि आप प्रोग्राम 'f.Parse ([] स्ट्रिंग {"- बूल", "-int", "100"} के कोड में पार्स करने के लिए तर्क पारित करना चाहते हैं तो आपको फ्लैगसेट की आवश्यकता है)। वैश्विक 'flag.Parse()' फ़ंक्शन पार्स के लिए एक तर्क स्वीकार नहीं करता है। यह कोड उदाहरण कोड कोड पैड के दौरे में चलाया जा सकता है जहां आप कमांड लाइन तर्क प्रदान नहीं कर सकते हैं। – chmike

उत्तर

36

यह flag पैकेज का उपयोग करने का जटिल उदाहरण है। आम तौर पर इस तरह से ध्वज स्थापित:

package main 

import "flag" 

// note, that variables are pointers 
var strFlag = flag.String("long-string", "", "Description") 
var boolFlag = flag.Bool("bool", false, "Description of flag") 

func init() { 
    // example with short version for long flag 
    flag.StringVar(strFlag, "s", "", "Description") 
} 

func main() { 
    flag.Parse() 
    println(*strFlag, *boolFlag) 
}  
+3

हां यह पसंदीदा तरीका है। एक और अच्छी चाल यह है कि आप किसी भी * मॉड्यूल विभाजन मॉड्यूल विशिष्ट झंडे से फ्लैग मॉड्यूल का उपयोग एक अधिक रखरखाव योग्य तरीके से – fabrizioM

+0

में कर सकते हैं, इसलिए 'init()' हमेशा 'मुख्य()' से पहले चलाया जाता है और इसके चर 'मुख्य' के अंदर पहुंच योग्य होते हैं। ? इसके अलावा 'strFlag' एक सूचक है, और इसलिए * मूल्य को पुनर्प्राप्त करने के लिए उपयोग किया जाता है? – lollercoaster

+0

@fabrizioM: किसी भी मॉड्यूल से? इसका सबसे सही मतलब क्या है? पाइथन पृष्ठभूमि से आ रहा है, ऐसा लगता है कि आप का मतलब है कि हमारी परियोजना से यहां आयात की जाने वाली अन्य फाइलें भी उसी ध्वज चर का उपयोग कर सकती हैं? यह एक अच्छी बात होगी। – lollercoaster