2010-07-28 231 views
82

如何在運行時獲得自己的程序名稱?什麼是C/C++的argv [0]的等價物?對我來說,使用正確的名字來產生用法是很有用的。什麼是go的等價於argv [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) – 2013-08-23 20:24:56

+0

正確的答案是'o s.Args []',而不是'flag.Args()'。標誌包用於解析命令行參數,如'-this -that','flag.Args()'返回未解析的其餘參數。這裏有一個例子:http://play.golang.org/p/_YtTcqLWnl – fiorix 2014-05-29 01:19:47

回答

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

參數是在oshttp://golang.org/pkg/os/#Variables

暴露如果你要做參數處理,該flaghttp://golang.org/pkg/flag是首選的方式。特別是對於你的情況flag.Usage

更新你給的例子:

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

應該從​​包做的伎倆

+0

我無法弄清楚如何獲得它的國旗,並不知道OS有這些信息。謝謝。 – grokus 2010-07-28 18:24:45

+1

警告 - 如果您通過「go run」調用程序,請不要使用此技術,您將獲得自動生成的a.out。 – 2013-03-03 23:11:56

+8

@bradclawsie你得到a.out,因爲這是可執行文件的名稱,行爲仍然是正確的。 – cthom06 2013-03-04 00:51:25

13

使用os.Args[0]

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