Search code examples
for-loopgoexceptionpanic

Handling a specific runtime error in Go loop


I'd like to catch panic: runtime error: index out of range in the following loop (inside function without returning) and concat X for each panic: runtime error: index out of range to the result:

func transform(inputString string, inputLength int) string {
    var result = ""
    for index := 0; index < inputLength; index++ {
        if string(inputString[index]) == " " {
            result = result + "%20"
        } else {
            result = result + string(inputString[index])
        }
    }
    return result
}

for example for inputString = Mr Smith and inputLength = 10 the result is Mr%20SmithXX. It has two X because 10 - 8 = 2.

I know I can catch the panic in returning from transform() but I'd like to handle it inside the loop without returning the function.


Solution

  • inputString = Mr Smith and inputLength = 10 the result is Mr%20SmithXX. It has two X because 10 - 8 = 2.


    package main
    
    import "fmt"
    
    func transform(s string, tLen int) string {
        t := make([]byte, 0, 2*tLen)
        for _, b := range []byte(s) {
            if b == ' ' {
                t = append(t, "%20"...)
            } else {
                t = append(t, b)
            }
        }
        for x := tLen - len(s); x > 0; x-- {
            t = append(t, 'X')
        }
        return string(t)
    }
    
    func main() {
        s := "Mr Smith"
        tLen := 10
        fmt.Printf("%q %d\n", s, tLen)
        t := transform(s, tLen)
        fmt.Printf("%q\n", t)
    }
    

    https://go.dev/play/p/wg7MIO8yUzF

    "Mr Smith" 10
    "Mr%20SmithXX"