Let’s say that you pass the string XII
to your function. That makes len(s)
3
, which means that the body of your loop would (if the panic didn’t occur) execute 4 times (when i
is 0
, 1
, 2
and 3
since your condition is i <= len(s)
.
On the iteration where i
is 2
(i.e. it refers to the second I
in XII
, the last character), when the line
nextInt := romanNum[s[i+1]]
attempts to access the next character (i+1
will be 3
) then it will be out of bounds. Remember, slices/arrays are 0
indexed. This is the reason for the panic.
It’s also worth nothing that if the panic did not occur when i
was 2
, then it would certainly occur during the next iteration where i
is 3
, since 3
is out of bounds for s
, on the following line:
currentInt := romanNum[s[i]]
To fix the issue, you need to reconsider how you approach the condition of the loop. Using <=
here is likely to cause you a problem. Also, within the body of the loop, you need to consider that when you’re looking at the last character in the string, there is not a next character, but your code just assumes that there is. Addressing both of these problems should help you overcome the issue.
solved Panic Runtime Error index out of range [3] with length 3