2010-07-28 11 views
82

रनटाइम पर मैं अपना प्रोग्राम का नाम कैसे प्राप्त कर सकता हूं? सी/सी ++ के Argv [0] के बराबर क्या है? मेरे लिए सही नाम के साथ उपयोग उत्पन्न करना उपयोगी है।गो के बराबर क्या है [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()'] का उपयोग कर सकते हैं (http://golang.org/pkg/flag/#NArg) –

+0

सही उत्तर 'o है एस। आर्ग [] ',' ध्वज नहीं। आर्ग्स() '। फ्लैग पैकेज 'थिस-थैट' जैसे कमांड लाइन तर्कों को पार्स करने के लिए है, और 'flag.Args() 'शेष तर्क देता है जिन्हें पार्स नहीं किया जाता है। यहां एक उदाहरण दिया गया है: http://play.golang.org/p/_YtTcqLWnl – fiorix

उत्तर

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

तर्क os पैकेज http://golang.org/pkg/os/#Variables

में संपर्क में हैं आप तर्क से निपटने क्या करने जा रहे हैं, flag पैकेज http://golang.org/pkg/flag पसंदीदा तरीका है। उदाहरण आप दे दी है के लिए विशेष रूप से अपने मामले के लिए flag.Usage

अद्यतन:

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

os पैकेज से चाल

+0

मैं यह नहीं समझ पाया कि इसे ध्वज में कैसे प्राप्त किया जाए और पता नहीं था कि ओएस में यह जानकारी है। धन्यवाद। – grokus

+1

चेतावनी - यदि आप "रन रन" के माध्यम से प्रोग्राम का आह्वान कर रहे हैं, तो इस तकनीक का उपयोग न करें, आपको स्वत: जेनरेट किया जाएगा। –

+8

@bradclawsie आपको a.out मिलता है क्योंकि यह निष्पादन योग्य का नाम है, व्यवहार अभी भी सही है। – cthom06

13

उपयोग os.Args[0] करना चाहिए

package main 
import "os" 
func main() { 
    println("I am ", os.Args[0]) 
}