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

时间:2015-09-30 21:04:29

标签: go slice

如何修改方法内的类型切片?我试过了 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
}

但它不起作用。

1 个答案:

答案 0 :(得分:2)

你需要使用一个指针接收器,你已经在第二个例子中试过了,但是你会覆盖指针值,这会破坏目的。

您可以使用

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

或者更清楚:

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