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

我正在用 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))

    }


}


慕妹3146593
浏览 350回答 2
2回答

呼啦一阵风

您的问题取决于这一行:if len(os.Args) == 0您正在检查您认为应该是文件名的第一个参数,但实际上是 go / 可执行文件名。因此,如果您想检查是否提供了参数,则需要检查参数长度是否大于1. 将代码更改为:if len(os.Args) <= 1 {&nbsp; &nbsp; log.Fatal("usage: gohex&nbsp; <filename>")}

神不在的星期二

另一个答案有几个问题。它有这个检查:len(os.Args) <= 1但len(os.Args)必须总是至少1,所以使用<=是没有意义的。此外,在这种特定情况下,len除此之外的任何其他内容2也是无效的。所以只需检查一下:package mainimport "os"func main() {&nbsp; &nbsp;if len(os.Args) != 2 {&nbsp; &nbsp; &nbsp; println("gohex <filename>")&nbsp; &nbsp; &nbsp; return&nbsp; &nbsp;}&nbsp; &nbsp;filename := os.Args[1]&nbsp; &nbsp;println(filename)}旁注,我个人也认为 usingos.Exit(1)在这种情况下也是无效的。我认为“打印帮助文本”是一个有效的用例,而不是错误。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go