如何向切片指针接收器追加元素

26

我有一个切片的类型别名,我希望在切片作为指针接收器时能够向切片中添加元素(或从切片中筛选元素):

package main

import (
    "fmt"
)

type itself []string

func (h itself) appendToItself(test string) {
    h = append(h, test)
}

func main() {
    h := itself{"1", "2"}
    h.appendToItself("3")
    fmt.Println(h, "<- how do I make it [1,2,3]")
}

日志:

[1 2] <- how do I make it [1,2,3]
1个回答

41
您需要实际传递一个指针,尝试一下:

您需要实际传递一个指针,尝试一下:

package main

import (
    "fmt"
)

type itself []string

func (h *itself) appendToItself(test string) {
    *h = append(*h, test)
}

func main() {
    h := itself{"1", "2"}
    h.appendToItself("3")
    fmt.Println(h, "<- how do I make it [1,2,3]")
}

23
想要补充一下为什么需要这样做。切片本身包含3个值:指向基础数组的指针、“长度”和“容量”。当您传递一个切片时,您传递了这些3个值的副本。函数仍然可以读取和更改切片中的项目,因为它有正确的指针,但是它无法更改长度,因为它是在使用这些字段的副本。使用指针可以使函数更改原始切片的“长度”。 - DanRedux

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接