Вы сортируете bs
, но используете для сравнения str
:
sort.Slice(bs, func(a, b int) bool {
return str[a] < str[b]
})
Операция bs := []byte(str)
копирует строку в байтовый массив и создает из него фрагмент. Поэтому при сортировке вы перемещаете символы в срезе bs
, но сравниваете символы в исходной строке, и они не перемещаются сортировкой.
Используйте правильное сравнение:
sort.Slice(bs, func(a, b int) bool {
return bs[a] < bs[b]
})