Трюк «Вырезать» в связанном документе делает то, что вы хотите:
xs := []int{1, 2, 3, 4, 5}
i := 0 // Any valid index, however you happen to get it.
x := xs[i]
xs = append(xs[:i], xs[i+1:]...)
// Now "x" is the ith element and "xs" has the ith element removed.
Обратите внимание, что если вы попытаетесь сделать однострочную из получения иОперации вырезания дают неожиданные результаты из-за сложного поведения нескольких присваиваний, в которых функции вызываются до того, как другие выражения будут оцениваться :
i := 0
x, xs := xs[i], append(xs[:i], xs[i+1:]...)
// XXX: x=2, xs=[]int{2, 3, 4, 5}
Обойти элемент можно, обернув элементоперация доступа в любом вызове функции, например, функция идентификации:
i := 0
id := func(z int) { return z }
x, xs := id(xs[i]), append(xs[:i], xs[i+1:]...)
// OK: x=1, xs=[]int{2, 3, 4, 5}
Однако в этот момент, вероятно, более понятно использовать отдельные назначения.
Для полноты, функция "cut"и его использование может выглядеть так:
func cut(i int, xs []int) (int, []int) {
y := xs[i]
ys := append(xs[:i], xs[i+1:]...)
return y, ys
}
t, series := cut(i, series)
f(t)
series = append(series, t)