戈朗 :how do I handle index out of range error?

标签 go panic

我正在用 Go 编写 CLI 接口(interface)程序。我的程序要求用户输入文件名作为参数。以下是我编写的处理代码 用户不输入任何参数的情况。但它出现 panic 并给出错误“索引超出范围”。我该如何处理?

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

关于戈朗 :how do I handle index out of range error?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37195234/

相关文章:

rest - 将音频/视频文件传递给 API

recursion - 尝试将 slice 作为参数传递给递归函数时 slice 超出范围 (Go)

go - 当(HTTP)通过将 io.Reader 从 os.Open 传递到 http.Post 来发布本地文件时,Content-Length 为零

go - 如何在不退出golang程序的情况下记录错误?

Go - 包含 slice 的接口(interface)无法编译

pointers - 戈兰 : Get the value from list element

android - "Starting emulator for AVD"然后 panic : could not open. ..”

json - 递归数据模型的golang json序列化/反序列化

linux - 加载使用 ptxdist 通过 i586_qemu 配置生成的镜像的虚拟机快照时发生内核 panic

c - 分配 : invalid block - Are Tcl_IncrRefCount and Tcl_DecrRefCount thread safe for threaded Tcl/1 interp per thread?