Go'nun argv [0] eşdeğeri nedir?


103

Çalışma zamanında kendi programımın adını nasıl alabilirim? Go'nun C / C ++ 'ın argv [0] eşdeğeri nedir? Bana göre kullanımı doğru isimle oluşturmak faydalıdır.

Güncelleme: bazı kodlar eklendi.

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()Burada uzunluğunu tespit etmek yerine kullanabilirsinizflag.NArg()
Keith Smiley

2
Doğru cevap os.Args[], değil flag.Args(). Bayrak paketi gibi komut satırı argümanları ayrıştırma içindir -this -thatve flag.Args()ayrıştırılmıyorsa kalan argümanlar döndürür. İşte bir örnek: play.golang.org/p/_YtTcqLWnl
fiorix

Yanıtlar:


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

Bağımsız değişkenler http://golang.org/pkg/os/#Variablesos paketinde gösterilmektedir

Argüman işleme yapacaksanız, http://golang.org/pkg/flagflag paketi tercih edilen yoldur. Özellikle sizin durumunuz içinflag.Usage

Verdiğiniz örnek için güncelleme:

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

hile yapmalı


Bunu nasıl bayrak haline getireceğimi çözemedim ve os'un bu bilgiye sahip olduğunu bilmiyordum. Teşekkürler.
grokus

1
uyarı - "go run" aracılığıyla bir programı çalıştırıyorsanız, bu tekniği kullanmayın, otomatik olarak oluşturulmuş a.out dosyasını alacaksınız.
Brad Clawsie

11
@bradclawsie a.out alırsınız çünkü bu çalıştırılabilir dosyanın adıdır, davranış hala doğrudur.
cthom06

16

kullanımı os.Args[0]ile ilgili os paket

package main
import "os"
func main() {
    println("I am ", os.Args[0])
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.