golang:我如何处理索引超出范围的错误?

Pri*_*ale 6 go panic

我在Go.my程序中编写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))
    }

}
Run Code Online (Sandbox Code Playgroud)

End*_*imo 10

你的问题依赖于这一行:

if len(os.Args) == 0
Run Code Online (Sandbox Code Playgroud)

你正在检查第一个参数,你应该是文件名,但实际上是go/executable文件名.因此,如果您希望检查是否已提供参数,则需要检查参数长度是否大于1.将代码更改为:

if len(os.Args) <= 1 {
    log.Fatal("usage: gohex  <filename>")
}
Run Code Online (Sandbox Code Playgroud)

  • 一定要把他的帖子标记为答案 (2认同)