2016-05-12 19 views
2

Ich schreibe ein CLI-Interface-Programm in Go.my Programm erfordert einen Benutzer einen Dateinamen als Argument eingeben. Folgendes ist der Code, den ich geschrieben habe, um die Situationen zu behandeln, in denen Benutzer kein Argument eingeben. aber es Panik und gibt einen Fehler "Index außerhalb des Bereichs". Wie gehe ich damit um?Golang: Wie handle ich mit Index außerhalb des Bereichs Fehler?

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

Bitte zeigen Sie uns den vollständigen Code. Das aktuelle Snippet kann nicht in Panik geraten. –

+0

Ich kann dieses Problem nicht reproduzieren. Sind Sie sicher, dass Sie genau diesen Code erhalten? –

+2

In Go wie in C wird der ausführbare Pfad als erster Parameter der Argumentenliste übergeben. Also musst du das überprüfen len == 1 – Warrior

Antwort

6

Ihr Problem beruht in dieser Zeile:

if len(os.Args) == 0 

Sie sind für das erste Argument überprüft, die, wie Sie die Dateinamen sein sollten sollten, aber in Wirklichkeit sind die go/ausführbare Datei. Wenn Sie überprüfen möchten, ob ein Argument angegeben wurde, müssen Sie überprüfen, ob die Argumentlänge größer als 1 ist. Ändern Sie den Code in:

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

    os.Exit(1) 
} 
+0

danke. es funktioniert –

+2

sicher sein, seinen Beitrag als Antwort zu markieren – eduncan911