【发布时间】:2021-05-26 08:55:54
【问题描述】:
我正在用 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))
}
}
【问题讨论】:
-
请向我们展示完整的代码。当前的 sn-p 不能恐慌。
-
我无法重现此问题。你确定你在这段代码上得到了这个错误吗?
-
在 Go 和 C 中一样,可执行路径作为参数列表的第一个参数传递。所以你必须检查 len == 1
-
@Warrior 你能详细说明一下吗?
-
当您运行程序时,
os.Args的最小长度为 1,因为默认情况下第一个位置被可执行(您的程序)路径占用。如果用户插入一个或多个参数,则您有len(os.Args)> 1 ,因此使用它作为条件来查看是否有其他命令行参数(或len(os.Args) == 1在您的情况下)。