我试图遍历slice值并更新一个或多个值,通过索引访问它或遍历它们。然后我有以下问题。
package main import "fmt" type Member struct { Name, Surname string Age int } type Members []Member func main() { members1 := Members{ {"Bob", "Doe", 30}, {"Jack", "Doe", 30}, {"John", "Doe", 30}, } members1.ModifyName() members1.ModifyAllNames1() members1.ModifyAllNames2() fmt.Println(members1) } func (members *Members) ModifyName() { *members[0].Name = "-" } func (members *Members) ModifyAllNames1() { for i := 0; i < len(*members); i++ { *members[i].Name = "-" } } func (members *Members) ModifyAllNames2() { for _, m := range *members { m.Name = "-" } }
然后我得到以下错误:
invalid operation: members[0] (type *Members does not support indexing) invalid operation: members[i] (type *Members does not support indexing)
类型*Members不支持索引,类型Members不支持。
*Members
Members
m := make([]Members, 5) pm := &m m[:2] // good pm[:2] // bad (*pm)[:2] // good
http://play.golang.org/p/_26TUBHdDm
package main import "fmt" type Member struct { Name, Surname string Age int } type Members []Member func main() { members1 := Members{ {"Bob", "Doe", 30}, {"Jack", "Doe", 30}, {"John", "Doe", 30}, } members1.ModifyName() members1.ModifyAllNames1() members1.ModifyAllNames2() fmt.Println(members1) } func (members *Members) ModifyName() { (*members)[0].Name = "-" } func (members *Members) ModifyAllNames1() { for i := 0; i < len(*members); i++ { (*members)[i].Name = "-" } } func (members *Members) ModifyAllNames2() { for _, m := range *members { m.Name = "-" } }