命令列編譯運行Go語言時參數代入的問題

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

轉載:http://c2pblog.sinaapp.com/archives/349


Golang 主要用於伺服器端,於是shell 命令下面的編譯運行就顯得非常重要。在linux下面搭建好Golang 環境以後,我們就需要用shell來控制go語言了。熟悉shell的人應該都知道在運行shell指令碼的時候經常會有代入參數的情況,一般格式是 sh test.sh [param...] 就是說在後面加上參數就好。那麼不出意外Go也是可以這樣使用的。當然是可以的。並且本文談論的重點就是Golang帶參數的編譯運行。

實現這種效果的是os 包。os.Args [ ]是一個 數組,長度不固定,預設長度是1 ,儲存著 go run test.go 這樣的字串,於是如果我們期待在後面加上參數並且調用,那麼就是在os.Args 後面進行追加和讀取。先看一段代碼:


package main
import(
"fmt"
"os")

func main(){
param1:=os.Args[1]
param2:=os.Args[2]
fmt.Println(param1,param2)

}

上面的檔案儲存為test.go,在命令列運行 go run test.go 1 2   輸出  1 2

這樣就可以解析參數了。看起來很簡單吧,可是這邊存在很嚴重的問題:如果沒有輸入參數怎麼辦?如果輸入參數少於要求參數數目怎麼辦?如果輸入參數多餘要求參數數目怎麼辦?上面的前兩個問題都會出現同樣的錯誤:index out of range ,第三個問題則會直接丟棄第三個參數。這些都是我們不希望看到的,所以必須做好驗證。有人說過 “永遠不要相信使用者的輸入!”意在提醒我們在處理任何和使用者互動的地方都要做好驗證,以備出現無法挽回的失誤。那麼我們要怎麼做?我找到的方法就是去依據len(os.Args)去做判斷。在擷取參數之前先去判斷究竟有沒有參數,如果有參數才能進行相關的操作,沒有參數則做出相應的提示。

package main
import(
"fmt"
"os")

func main(){
if len(os.Args)>1{
param1:=os.Args[1]
if len(os.Args)==3{
param1:=os.Args[1]
param2:=os.Args[2]
}
fmt.Println(param1,param2)

} else {
fmt.Println(” 需要參數”)
}
}

這樣就能保證不會出現數組越界的情況


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.