转到更新切片迭代错误“不支持索引". [英] Go update slice iterating error "does not support indexing"
本文介绍了转到更新切片迭代错误“不支持索引".的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试遍历切片值并更新一个或多个值,通过索引访问它或遍历它们.那我有以下问题.
I'm trying to iterate through slice values and update one or more values, accessing it by index or iterating through them. Then I have the following problem.
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)
推荐答案
类型 *成员
不支持索引,类型成员
可以.
Type *Members
does not support indexing, type Members
does.
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 = "-"
}
}
这篇关于转到更新切片迭代错误“不支持索引".的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文