Golang实现qwerty转abcdef解密函数触发index out of range错误求解
错误原因
- Go 语言
for _, val := range slice语法中,val是切片元素本身的值,不是元素下标。你代码中遍历到第一个字符'q'时,i的值是'q'对应的ASCII码113,用113作为下标访问长度远小于113的encrStrng切片,直接触发索引越界panic。 - 另外你代码中
case 'q'后缺少Go语法要求的冒号,也会导致编译失败。
修复方案
推荐直接使用遍历拿到的字符值做判断,同时用strings.Builder优化字符串拼接性能,修复后代码如下:
import "strings" func Decrypt(strToDecrypt string) string { encrStrng := []rune(strings.ToLower(strToDecrypt)) var decrStrng strings.Builder for _, c := range encrStrng { switch c { case 'q': decrStrng.WriteRune('a') case 'w': decrStrng.WriteRune('b') case 'e': decrStrng.WriteRune('c') case 'r': decrStrng.WriteRune('d') case 't': decrStrng.WriteRune('e') case 'y': decrStrng.WriteRune('f') // 其余映射规则按需求补全 default: decrStrng.WriteRune(c) } } return decrStrng.String() }
如果确实需要通过下标访问字符,可修改遍历写法为:
for idx := range encrStrng { switch encrStrng[idx] { // 逻辑同上 } }
内容的提问来源于stack exchange,提问作者E3bones
相关产品推荐
相关产品推荐

