2010-07-28 42 views
82

Làm cách nào để có được tên chương trình của riêng mình khi chạy? Có gì tương đương với của C/C++ argv [0]? Đối với tôi nó rất hữu ích để tạo ra việc sử dụng với tên đúng.Tương đương với argv [0] của Go là gì?

Cập nhật: đã thêm một số mã.

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

Thay vì phát hiện chiều dài của ' flag.Args() 'ở đây bạn có thể sử dụng [' flag.NArg() '] (http://golang.org/pkg/flag/#NArg) –

+0

Câu trả lời đúng là' o s.Args [] ', không phải' flag.Args() '. Gói cờ là để phân tích các đối số dòng lệnh như '-this -that' và' flag.Args() 'trả về các đối số còn lại không được phân tích cú pháp. Dưới đây là một ví dụ: http://play.golang.org/p/_YtTcqLWnl – fiorix

Trả lời

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

luận cứ được tiếp xúc trong os gói http://golang.org/pkg/os/#Variables

Nếu bạn đang đi để làm xử lý đối số, các flag gói http://golang.org/pkg/flag là cách ưa thích. Cụ thể đối với trường hợp của bạn flag.Usage

Cập nhật cho ví dụ bạn đưa ra:

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

nên làm các trick

+0

Tôi không thể tìm ra cách để có được nó trong cờ và không biết os có thông tin đó. Cảm ơn. Cảnh báo – grokus

+1

- không sử dụng kỹ thuật này nếu bạn đang gọi một chương trình thông qua "go run", bạn sẽ nhận được a.out được tạo tự động. –

+8

@bradclawsie bạn nhận được a.out vì đó là tên của tệp thực thi, hành vi vẫn chính xác. – cthom06

13

sử dụng os.Args[0] từ gói os

package main 
import "os" 
func main() { 
    println("I am ", os.Args[0]) 
} 
Các vấn đề liên quan