7

Go で CLI インターフェイス プログラムを作成しています。私のプログラムでは、ユーザーが引数としてファイル名を入力する必要があります。以下は、ユーザーが引数を入力しない状況を処理するために私が書いたコードです。しかし、パニックになり、「インデックスが範囲外です」というエラーが発生します。これをどのように処理すればよいですか?

  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))
    }

}
4

2 に答える 2

12

問題は次の行に依存しています。

if len(os.Args) == 0

ファイル名であるはずの最初の引数をチェックしていますが、実際には go / 実行可能ファイル名です。したがって、引数が指定されているかどうかを確認したい場合は、引数の長さが より大きいことを確認する必要があります1。コードを次のように変更します。

if len(os.Args) <= 1 {
    log.Fatal("usage: gohex  <filename>")
}
于 2016-05-12T19:11:48.157 に答える