如何在方法中修改类型切片?
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)
}
如何在方法中修改类型切片?我试过 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)
}