Я нашел действительно странную проблему с GCCGO, и мне было интересно, может ли кто-нибудь объяснить это.delete element from slice difference gccgo vs gc
Я пытаюсь удалить элемент из среза по индексу, используя предлагаемые кусочки (https://github.com/golang/go/wiki/SliceTricks).
Следующий код (https://play.golang.org/p/f039m1h7Z1):
package main
import "fmt"
func main() {
xs := []int{0,1,2,3,4}
i := 2
xs, xs[len(xs)-1] = append(xs[:i], xs[i+1:]...), 0
fmt.Println(xs)
}
Работает с ходу компилятором (идти бег), но когда я пытаюсь скомпилировать его с
gccgo -g -static-libgcc
Я получаю
panic: runtime error: index out of range
на линии:
xs, xs[len(xs)-1] = append(xs[:i], xs[i+1:]...), 0
Почему это происходит?
Примечание: Я пишу xs[len(xs)-1] = 0
, потому что в моем полнофункциональном случае это на самом деле кусочек указателей на структуры, поэтому в соответствии с кусочками трюков мне нужно сделать конечный указатель нулевым в старом срезе для предотвращения памяти утечки.
Звучит как ошибка в gccgo. Вы сообщили об этом? https://github.com/golang/go/issues –
Я не нашел для этого никаких проблем. Создал один, на всякий случай: https://github.com/golang/go/issues/23433. –