我试图迭代切片值并更新一个或多个值,通过索引访问或迭代它们.那么我有以下问题.

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支持.

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 = "-"
    }
}

Go相关问答推荐

如何获得与cksum相同的CRC 32?

如何在定制普罗米修斯出口商中测试动态计量注册?

如何使用我的 struct 化日志(log)记录格式使人panic ?

如何将文件从AWS S3存储桶复制到Azure BLOB存储

如何使用GO GIN从Auth0 JWT内标识检索权限

如何用';贪婪原则';正确地

AWS Lambda 中的 Websocket URL 超时达到错误

为什么 net/http 不遵守超过 30 秒的超时持续时间?

如何在 Golang 中打印 2 列表?

具有两个参数的动态规划:天数和优惠券

也许在 golang 中包(字符串和字符串类型不匹配)

Go Colly 如何找到请求的元素?

枚举的 Golang 验证器自定义验证规则

接受通道和切片的通用函数

如何在 Docker 容器中使用私有存储库进行身份验证

Golang - 客户 Unmarshaler/Marshaler 在指针上具有 nil/null 值

如何使用特定的 Go 版本运行 govulncheck?

Golang 数据库/sql 与 SetMaxOpenConns 挂起

如何在眼镜蛇(golang)中将标志作为参数传递?

Golang 有类似 C++ 的 decltype 的东西吗?