對于C/C++,java,或C#程序,我們可以通過入口函數(main函數)直接獲取命令行參數:int main(int argc, char **argv){ PRintf("%s", argv[1]); return 0;}
但是,golang的入口函數沒有參數,無法直接獲取命令行參數:
fun main() {
}
對于golang,獲取命令行參數,只能通過golang提供的標準包os,或flag。
flag只能解析標準的命令行參數,例如:
program.exe -h 192.168.1.194 或 program --host 192.168.1.194(用空著將參數名和參數值分開)
program.exe -h=192.168.1.194 或 program --host=192.168.1.194(用"="將參數名和參數值分開)
program.exe -d(不帶值表示bool類型,并且置為true,不加-d表示該間值為false)
獲取方式如下:
host := flag.String("h", "127.0.0.1", "host") daemon := flag.Bool("d", false, "daemon")
第一參數表示參數名,第二個參數表示參數值(默認),第三個參數為參數說明(意義描述)
但在使用host和daemon之前,需要調用flag.Parse()來解析命令行,因為前兩句僅僅將參數存儲地址告訴了flag,需要執行Parse方法之后,參數值才能寫入變量
對于非標準命令行格式(如 program.exe /h192.168.1.194),我們只能通過os.Args來獲取,然后自己解析
獲取方式如下:
hoststr := os.Args[1] (Args[0]為program.exe)
完整源碼如下:
package mainimport ( "flag" "fmt" "os")func main() { host := flag.String("h", "127.0.0.1", "host") daemon := flag.Bool("d", false, "daemon") flag.Parse() fmt.Println(*host) fmt.Println(*daemon) fmt.Println(os.Args)}運行結果:
flagtest.exe -h 192.168.1.194 -d
191.168.1.194
true
[flagtest.exe -h 192.168.1.194 -d]
flagtest.exe -h 192.168.1.194
191.168.1.194
false
[flagtest.exe -h 192.168.1.194]
新聞熱點
疑難解答