package main
import "fmt"
func main() {
paths := []string{"hello", "world", "mars"}
var result = delete(paths, 1)
fmt.Println(result)
fmt.Println(paths)
}
func delete(paths []string, index int) []string {
paths = append(paths[:index], paths[index+1:]...)
return paths
}
Результат приведенного выше кода следующий:
[hello mars]
[hello mars mars]
Asвы видите, второй fmt.Println(paths)
, очевидно, использует измененный фрагмент, но не использует переназначенное значение.Это почему?Я ожидал, что он напечатает [hello mars]
, как и раньше.
Я знаю, что передаваемый paths
- это не тот же срез, что и параметр paths
в функции delete()
, ожидающий ссылки на тот жебазовый массив.Но я все еще не понимаю, как я изменил базовый массив paths
, передаваемый в функцию delete
, так как он печатает [hello mars mars]
вместо [hello world mars]
.