golang:如何处理索引超出范围错误?
golang :how do I handle index out of range error?
我正在 Go.my 程序中编写一个 CLI 界面程序,该程序要求用户输入文件名作为参数。以下是我编写的处理代码
用户不输入任何参数的情况。但它出现恐慌并给出错误 "index out of range"。我该如何处理?
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))
}
}
你的问题出在这一行:
if len(os.Args) == 0
您正在检查第一个参数,您认为它应该是文件名,但实际上是 go / 可执行文件名。因此,如果您希望检查是否提供了参数,则需要检查参数长度是否大于 1
。将代码更改为:
if len(os.Args) <= 1 {
log.Fatal("usage: gohex <filename>")
}
另一个答案有几个问题。它有这个支票:
len(os.Args) <= 1
但 len(os.Args)
必须始终至少为 1
,因此使用 <=
毫无意义。
此外,在这种特定情况下,除 2
之外的任何内容的 len
都是无效的,因为
出色地。所以只需检查一下:
package main
import "os"
func main() {
if len(os.Args) != 2 {
println("gohex <filename>")
return
}
filename := os.Args[1]
println(filename)
}
旁注,我个人也认为在这种情况下使用 os.Exit(1)
是无效的
以及。我认为“打印帮助文本”是一个有效的用例,而不是错误。
我正在 Go.my 程序中编写一个 CLI 界面程序,该程序要求用户输入文件名作为参数。以下是我编写的处理代码 用户不输入任何参数的情况。但它出现恐慌并给出错误 "index out of range"。我该如何处理?
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))
}
}
你的问题出在这一行:
if len(os.Args) == 0
您正在检查第一个参数,您认为它应该是文件名,但实际上是 go / 可执行文件名。因此,如果您希望检查是否提供了参数,则需要检查参数长度是否大于 1
。将代码更改为:
if len(os.Args) <= 1 {
log.Fatal("usage: gohex <filename>")
}
另一个答案有几个问题。它有这个支票:
len(os.Args) <= 1
但 len(os.Args)
必须始终至少为 1
,因此使用 <=
毫无意义。
此外,在这种特定情况下,除 2
之外的任何内容的 len
都是无效的,因为
出色地。所以只需检查一下:
package main
import "os"
func main() {
if len(os.Args) != 2 {
println("gohex <filename>")
return
}
filename := os.Args[1]
println(filename)
}
旁注,我个人也认为在这种情况下使用 os.Exit(1)
是无效的
以及。我认为“打印帮助文本”是一个有效的用例,而不是错误。