Учитывая срез (не указатель на срез!), Есть ли способ его усечь?
Наивная реализация не работает из-за области действия:
package main
import (
"fmt"
)
func truncate(s []int, to int) []int{
s = s[:to] # <- has no effect outside this function
return s
}
func main() {
s := []int{0, 1, 2, 3, 4}
s1 := truncate(s, 3)
fmt.Printf("%v\n", s1)
fmt.Printf("%v\n", s)
}
печать
[0 1 2]
[0 1 2 3 4] # <- can we get [0 1 2] here?
Есть ли способ изменить длину или емкость существующего среза или они неизменны?
ETA: Я подумал, что это достаточно очевидно, но, очевидно, нет: когда я спрашиваю, возможно ли сделать это вместо , я имею в виду без переназначения s
.