Pointers 通过传递切片的指针来更改切片

Pointers 通过传递切片的指针来更改切片,pointers,go,slice,Pointers,Go,Slice,我有一个切片,我想用一个函数来更改(例如,我想删除第一个元素)。我想用指针,但我还是不能索引它。我做错了什么 您需要使用(*list) 或者是一种通常更具灵活性的不同方法: func change(list []int) []int { return list[1:] } +1。无论如何,切片都是“引用类型”。因此,通过传递指针并尝试在适当的位置对其进行修改,您实际上并没有获得多少好处。@SimonWhitehead这有实际的用途。请参阅:有关使用切片表示生成队列的示例,请参阅@dy

我有一个切片,我想用一个函数来更改(例如,我想删除第一个元素)。我想用指针,但我还是不能索引它。我做错了什么

您需要使用
(*list)

或者是一种通常更具灵活性的不同方法:

func change(list []int) []int {
    return list[1:]
}

+1。无论如何,切片都是“引用类型”。因此,通过传递指针并尝试在适当的位置对其进行修改,您实际上并没有获得多少好处。@SimonWhitehead这有实际的用途。请参阅:有关使用切片表示生成队列的示例,请参阅@dyoo示例。我同意,在某些特定的情况下,它是有意义的(比如示例中别名类型的指针接收器)。我不认为这适用于OP的情况(这正是我评论的目标)。@DewyBroto我知道这一点。我并不质疑什么更为惯用:)@SimonWhitehead:“因此,通过传递指针并尝试在适当的位置修改它,你不会真正获得太多。”他试图改变切片的长度。他通过传递指针获得所有信息,因为必须替换切片值才能获得不同的长度。
func change(list *[]int) {
    *list = (*list)[1:]
}
func change(list []int) []int {
    return list[1:]
}