2016-05-12 132 views
2

我正在Go.my程序中編寫CLI接口程序,要求用戶輸入文件名作爲參數。以下是我寫的處理 用戶不輸入任何參數的情況的代碼。但它恐慌,並給出了一個錯誤「索引超出範圍」。我該如何處理?golang:我如何處理索引超出範圍的錯誤?

package main 

import (
    "encoding/hex" 
    "fmt" 
    "io/ioutil" 
    "log" 
    "os" 
) 

func main() { 
    if len(os.Args) == 0 { 
     fmt.Println("usage: gohex <filename>") 

     os.Exit(1) 
    } else { 
     filename := os.Args[1] 

     data, err := ioutil.ReadFile(filename) 
     if err != nil { 
      log.Fatal(err) 
     } 
     fmt.Println(hex.Dump(data)) 
    } 

} 
+0

請告訴我們完整的代碼。目前的片段不能恐慌。 –

+0

我無法重現此問題。你確定你在這個代碼中出現這個錯誤嗎? –

+2

在Go中與C一樣,可執行路徑作爲參數列表的第一個參數傳遞。所以你必須檢查一下len == 1 – Warrior

回答

6

您的問題依賴於該行:

if len(os.Args) == 0 

你檢查它,你認爲應該是文件名的第一個參數,但實際上是GO /可執行文件名。因此,如果您想檢查是否提供了參數,則需要檢查參數長度是否大於1。將代碼更改爲:

if len(os.Args) <= 1 { 
    fmt.Println("usage: gohex <filename>") 

    os.Exit(1) 
} 
+0

謝謝。它的工作 –

+2

一定要將他的帖子標記爲答案 – eduncan911