क्या है 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.