Golang系列:打印命令行参数
記得最早在學(xué)校機(jī)房學(xué)習(xí) Java 時(shí),照著書上的例子,寫一個(gè)最簡單 main 方法,當(dāng)程序運(yùn)行并在屏幕上打印出 hello world 時(shí),內(nèi)心竟有種莫名的激動,相信很多人都有這種經(jīng)歷吧。
不管學(xué)什么編程語言,都先從命令行程序搞起。
首先,我們來寫一個(gè) Go 語言版的 hello world 程序:
// hello.gopackage mainimport "fmt"func main() {fmt.Println("hello world") }接下來,我們可以直接在命令行執(zhí)行下面的命令來運(yùn)行該程序:
$ go run hello.go當(dāng)然,也可以先將源代碼編譯成可執(zhí)行文件,然后再運(yùn)行可執(zhí)行文件:
# 在當(dāng)前目錄會生成同名可執(zhí)行文件 $ go build hello.go# 運(yùn)行可執(zhí)行文件 $ ./hello運(yùn)行完程序,命令行會輸出一個(gè) hello world,對于剛?cè)腴T的同學(xué),這一刻興奮的心情是難以言表的。
我們可不是這么輕易就滿足的,接下來,我們還要接收命令行參數(shù)并打印出來,趁著剛才的興奮勁兒再寫一段程序:
// args.gopackage mainimport ("fmt""os" )func main() {fmt.Println(os.Args[:]); }上面的代碼看上去很簡單,卻多了些奇怪的寫法。首先,我們新引入了一個(gè) os 包,然后又多了個(gè) os.Args[:] 這樣的寫法。
os 是操作系統(tǒng)相關(guān)功能包,os.Args 表示命令行參數(shù),它的類型是 []string 字符串切片,我們通過 os.Args[:] 獲取所有命令行參數(shù),其中第一個(gè)是當(dāng)前執(zhí)行的文件,后面是額外指定的參數(shù)。
這些知識點(diǎn)后續(xù)也會深入介紹,現(xiàn)在先不管他三七二十一,跑一跑遛遛再說。
編譯后運(yùn)行可執(zhí)行文件:
$ ./args hello world# 輸出結(jié)果 [./args hello world]一般來說,我們真正需要的是從第二個(gè)位置開始的參數(shù),下面程序利用 len() 函數(shù)獲取切片的長度,然后使用 for 循環(huán)從索引為 1 的地方開始取值,取出的值以連字符分隔開:
// args.gopackage mainimport ("fmt""os" )func main() {// 聲明后默認(rèn)值是空字符串var str, sep stringfor i := 1; i < len(os.Args); i++ {str += sep + os.Args[i]sep = "-"}fmt.Println(str) }再次編譯后運(yùn)行:
$ ./args hello world# 輸出結(jié)果 hello-world我們還可以先利用 os.Args[1:] 獲取到所需的參數(shù)集,然后使用 range 來遍歷參數(shù)集:
// args.gopackage mainimport ("fmt""os" )func main() {// 聲明并初始化的簡寫方式str, sep := "", ""// range會產(chǎn)生{index, value} 這里不需要indexfor _, arg := range os.Args[1:] {str += sep + argsep = "-"}fmt.Println(str) }最后,我們還可以引入 strings 包,使用 strings.Join() 方法,將參數(shù)集以指定字符分隔開:
// args.gopackage mainimport ("fmt""os""strings" )func main() {fmt.Println(strings.Join(os.Args[1:], "-")); }現(xiàn)在,我們已經(jīng)學(xué)會好幾種“回字”的寫法了。?
轉(zhuǎn)載于:https://www.cnblogs.com/liuhe688/p/9597709.html
總結(jié)
以上是生活随笔為你收集整理的Golang系列:打印命令行参数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql数据库(3)-查询
- 下一篇: 如何判断两个时间段是否有交集