我有下面的函数,它从终端接收命令,并根据输入打印一些东西.这似乎很简单,如果用户键入"添加",系统将打印一行,如果用户不键入任何内容,系统将打印其他内容.

每当用户输入add时,它都会工作.如果用户没有输入它抛出的任何内容

panic :运行时错误:GoLang中的索引超出范围

这是为什么呢?

  func bootstrapCmd(c *commander.Command, inp []string) error {


     if inp[0] == "add" {
                  fmt.Println("you typed add")
              } else if inp[0] == "" {
                  fmt.Println("you didn't type add")
              }


          return nil

    }

推荐答案

如果用户不提供任何输入,则inp数组为空.这意味着即使索引0也超出范围,即inp[0]无法访问.

在判断inp[0] == "add"之前,可以先用len(inp)判断inp的长度.这样做可能会:

if len(inp) == 0 {
    fmt.Println("you didn't type add")
} else if inp[0] == "add" {
    fmt.Println("you typed add")
}

Go相关问答推荐

"k8s.io/apimachinery/pkg/runtime.对象(缺少方法DeepCopyBody)

将Go程序导出到WASM—构建约束排除所有Go文件

如何使用Docker Compose配置Go,使main. go文件位于/CMD文件夹中

在保留额外参数的同时解封YAML

如何存储来自异步Goroutine的返回值列表?

禁用Golang中的终端

你能把用户界面文件中的GTK4应用程序窗口添加到GTK4应用程序中吗?

go中跨域自定义验证的问题

在 Go 中将元数据从一个 JPEG 复制到另一个

在golang二进制中嵌入SvelteKit

Golang校验器包:重命名字段错误处理

为什么docall在singleflight中使用go panic?

使用 Go 根据 /etc/shadow 文件中的散列密码验证密码

如何从 Go 中的 `HijackedResponse` 中删除 Cursor Position ANSI 转义码?

泛型:实现嵌套接口

在 .go 文件中运行一个函数和在 Go 模板中调用它有什么区别?

当函数返回一个函数时,为什么 Go 泛型会失败?

Go 使用 struct 作为接口而不实现所有方法

使用 bolthold 3 条件进行 boltDB 查询

如何在 Go 中使用 Pact 返回错误请求(400、500)?