Следующий код go не компилируется, потому что (я считаю) есть ошибка в отношении ссылок на указатели.Фиксация неправильно отредактированных фрагментов в замене массива
В частности, сообщение об ошибке
prog.go:13: cannot use append((*x)[:remove], (*x)[remove + 1:]...) (type []int) as type *[]int in assignment
Вот отведенной и упрощенная версия кода, который приводит в этом сообщении об ошибке.
package main
import "fmt"
func main() {
x := &[]int{11, 22, 33, 44, 55, 66, 77, 88, 99}
for i, addr := range *x {
if addr == 22 {
for len(*x) > 5 {
remove := (i + 1) % len(*x)
x = append((*x)[:remove], (*x)[remove+1:]...)
}
break
}
}
fmt.Println(x)
}
Спасибо! Можете ли вы привести пример, где требуется указатель на срез? – jayunit100
@ jayunit100: вам нужен указатель, если вы хотите, чтобы функция имела возможность изменять длину или емкость среза. Вы можете посмотреть пример [IntHeap] (https://golang.org/pkg/container/heap/#example__intHeap) в контейнере/куче. Для методов Push и Pop требуется приемник указателя. – JimB