紧急:运行时错误:Golang中的索引超出范围

时间:2019-06-26 02:33:02

标签: go slice panic

我有一个函数,必须将与字符符文相对应的索引分配给1。我有一个字母片,另一个带字母长度的字节片,例如,单词“ adel”将以字节分配像这样[100110000001000000 ....]进行切片,导致a-到第一索引,d-第四索引等等。但是,如果单词“ a”的第2个字符必须移至下一个字母切片块。我该如何将函数设置为此逻辑?

我只使用了2个字母的块的开头,长度为52位。现在,我出现此错误:

panic: runtime error: index out of range

goroutine 1 [running]:
main.getVector(0xc000080000, 0x1a, 0x1a, 0xc000080000, 0x1a, 0x1a)
        C:/Users/agi_a/code/CARDS/stem.go:90 +0x25b
main.main()
        C:/Users/agi_a/code/CARDS/main.go:18 +0x156
exit status 2
{

var alphabet = []string{
    "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r",
    "s", "t", "u", "v", "w", "x", "y", "z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
    "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
}
var a = make([]byte, len(alphabet))

func converToChar(s string) (r rune) {
    new, _ := utf8.DecodeRuneInString(s)
    switch {
    case 97 <= new && new <= 122:
        return new - 96
    case 65 <= new && new <= 90:
        return new - 64
    default:
        return r
    }
}

func getVector(s []string) []byte {
    for _, alph := range alphabet {
        for _, str := range s {
            if str == alph {
                if a[converToChar(alph)-1] == 0 {
                    a[converToChar(alph)-1] = 1
                } else if a[converToChar(alph)-1] == 1 {
                    a[converToChar(alph)-25] = 1
                }

            }
        }
    }
    return a
}   
}

我希望单词“ adele”的字节片将为[10011000001000000 .... 00001 ......],因为在下一个块中,第二个“ e”将被分配为索引1。 >

0 个答案:

没有答案