क्या है Go के बराबर argv [0]?


103

मैं अपने प्रोग्राम का नाम रनटाइम पर कैसे प्राप्त कर सकता हूं? C / C ++ के argv [0] के बराबर Go क्या है? मेरे लिए यह सही नाम के साथ उपयोग उत्पन्न करने के लिए उपयोगी है।

अद्यतन: कुछ कोड जोड़ा गया।

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()
कीथ स्माइली

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, ...

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)
}

चाल चलनी चाहिए


मैं यह पता नहीं लगा सका कि इसे झंडे में कैसे लाया जाए और पता नहीं कि ओएस के पास यह जानकारी है। धन्यवाद।
ग्रॉस

1
चेतावनी - इस तकनीक का उपयोग न करें यदि आप "गो रन" के माध्यम से एक कार्यक्रम का आह्वान कर रहे हैं, तो आपको ऑटोजेनरेटेड a.out मिलेगा।
ब्रैड क्लॉसी

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

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