panic: runtime error: index out of range in Go

前端 未结 3 1192
耶瑟儿~
耶瑟儿~ 2021-02-07 00:01

I have the following function that takes a command from terminal and prints something based on input. It seems simple enough, if the user types \'add\' the system prints a line,

相关标签:
3条回答
  • 2021-02-07 00:19

    Also you can use recover() for check existing index of slices

    func takes(s []string, i int) string {
        defer func() {
            if err := recover(); err != nil {
               return
            }
        }()
        return s[i]
    }
    
    if takes(inp,0) == "add" {
       fmt.Println("you typed add")
    } else {
       fmt.Println("you didn't type add")
    }
    
    0 讨论(0)
  • 2021-02-07 00:26

    You have to check the length of inp first:

    func bootstrapCmd(c *commander.Command, inp []string) (err error) {
        if len(inp) == 0 {
            return errors.New("no input")
        }
        switch inp[0] {
        case "add":
            fmt.Println("you typed add")
        case "sub":
            fmt.Println("you typed sub")
        default:
            fmt.Println("invalid:", inp[0])
        }
        return nil
    
    }
    
    0 讨论(0)
  • 2021-02-07 00:32

    If the user does not provide any input, the inp array is empty. This means that even the index 0 is out of range, i.e. inp[0] can't be accessed.

    You can check the length of inp with len(inp) before checking inp[0] == "add". Something like this might do:

    if len(inp) == 0 {
        fmt.Println("you didn't type add")
    } else if inp[0] == "add" {
        fmt.Println("you typed add")
    }
    
    0 讨论(0)
提交回复
热议问题