Goのargv [0]に相当するものは何ですか?


103

実行時に自分のプログラムの名前を取得するにはどうすればよいですか?GoのC / C ++の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()
キース・スマイリー

2
正解はos.Args[]でなくflag.Args()です。フラグパッケージはのようなコマンドライン引数を解析するためのもので-this -thatflag.Args()解析されない残りの引数を返します。例は次のとおり
p

回答:


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で公開されています

引数を処理する場合は、http://golang.org/pkg/flagflagパッケージが推奨される方法です。特にあなたの場合flag.Usage

あなたが与えた例の更新:

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

トリックを行う必要があります


私はそれをフラグに入れる方法を理解できず、osがその情報を持っていることを知りませんでした。ありがとう。
grokus 2010

1
警告-「実行」を介してプログラムを呼び出す場合は、この手法を使用しないでください。自動生成されたa.outが得られます。
Brad Clawsie 2013

11
@bradclawsie実行可能ファイルの名前であるため、a.outが返されますが、動作はまだ正しいです。
cthom06

16

os.Args[0]からの使用osパッケージ

package main
import "os"
func main() {
    println("I am ", os.Args[0])
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.