如何在方法中修改类型切片?

How to modify type slice inside method?

如何在方法中修改类型切片?我试过 http://play.golang.org/p/ul2n8mk6ye

type Test []string

func (test Test) Add(str string) {
    test = append(test, str)
}

func main() {
    test := Test{}
    test.Add("value")
    fmt.Println(len(test))//0
}

http://play.golang.org/p/nV9IO7E5sp

type Test []string

func (test *Test) Add(str string) {
    v := append(*test, str)
    test = &v
}

func main() {
        test := Test{}
    test.Add("value")
    fmt.Println(len(test))//0
}

但是不行。

您需要使用您在第二个示例中尝试过的指针接收器,但是您随后覆盖了指针值,这违背了目的。

你可以使用

func (test *Test) Add(str string) {
    v := append(*test, str)
    *test = v
}

或者更清楚:

func (test *Test) Add(str string) {
    *test = append(*test, str)
}