2010-07-28 40 views
82

Kendi programımın adını çalışma zamanında nasıl alabilirim? Go'nun C/C++ 's argv'sine eşdeğer ne [0]? Benim için kullanımın doğru isim ile üretilmesi yararlıdır.Go'nun argv [0] karşılığı nedir?

Güncelleme: bazı kod eklendi. Eğer argüman işlemeyi yapmak gidiyoruz

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

yerine 'uzunluğunu tespit flag.Args() 'burada kullanabilirsiniz [' flag.NArg() '] (http://golang.org/pkg/flag/#NArg) –

+0

Doğru cevap o s.Args [] ', flag.Args()' değil. Bayrak paketi, -this -that komutu gibi argüman satırı argümanlarını ayrıştırmak içindir ve flag.Args() ', ayrıştırılmayan diğer argümanları döndürür. İşte bir örnek: http://play.golang.org/p/_YtTcqLWnl – fiorix

cevap

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

Argümanlar os paketin http://golang.org/pkg/os/#Variables

maruz edilir flag paket http://golang.org/pkg/flag tercih edilen yoldur. Özellikle dava için flag.Usage

Verdiğin örneğin Güncelleme:

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

os paketinden hile

+0

Bayrağa nasıl ulaşacağımı anlayamadım ve os'un bu bilgiye sahip olduğunu bilmiyordum. Teşekkürler. – grokus

+1

uyarı - "go run" ile bir program çağırıyorsanız, bu tekniği kullanmayın, otomatik olarak a.out alırsınız. –

+8

@bradclawsie a.out olsun, çünkü bu yürütülebilir dosyanın adı, davranış hala doğru. – cthom06

13

kullanım os.Args[0] yapmalıyım

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