如何附加到切片指针接收器

sam*_*mol 12 go

我有一个切片的类型别名.并且我希望能够在切片是指针接收器时附加到切片(或从切片中过滤):

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]")
}
Run Code Online (Sandbox Code Playgroud)

日志:

[1 2] <- how do I make it [1,2,3]
Run Code Online (Sandbox Code Playgroud)

Aka*_*all 25

你需要实际传递指针,尝试:

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]")
}
Run Code Online (Sandbox Code Playgroud)

  • 只想添加*为什么*这是必要的.切片本身包含3个值:指向底层数组的指针,"长度"和"容量".传入切片时,您传递的是这3个值的副本.该函数仍然可以读取和更改切片中的项目,因为它具有正确的指针,但是,它不能更改长度,因为它正在使用这些字段的副本.使用指针允许该功能改变原件的"长度". (18认同)