Append не срабатывает и не применяется на слайс во вне? Вроде тут что-то связаное с SliceHeader, но я точно не уверен как это объяснить
package main
import "fmt"
func slAppend(nums []int, val int) {
nums = append(nums, val)
}
func main() {
newSlice := make([]int, 0, 5) // initializing new slice with Len 0, Cap 5
newSlice = append(newSlice, 5) // successful append, Len 1, Cap 5
slAppend(newSlice, 5) // append didn't work, Len 1, Cap 5
fmt.Println(newSlice)
}
nums это структура с адресом слайса и ещё какой-то фигнёй, передаётся в функцию копированием при append'е nums внутри функции получает новое значение len, а снаружи не получает, т.к. структура слайса передана по значению, а не по ссылке type slice struct { zerothElement *type len int // внутри функции меняется, а снаружи нет cap int }
nums это копия, делайте так: func slAppend(nums []int, val int) []int { return append(nums, val) }
Вот так пример становится интереснее https://go.dev/play/p/HpZhQX8fVhh
Обсуждают сегодня