我看到该范围返回键和值的"副本".有没有办法让该范围返回项目的地址?实例

package main

import "fmt"

type MyType struct {
    field string
}

func main() {
    var array [10]MyType

    for _, e := range array {
        e.field = "foo"
    }

    for _, e := range array {
        fmt.Println(e.field)
        fmt.Println("--")
    }
}

http://play.golang.org/p/AFOGG9NGpx

这里"field"没有被修改,因为Range发送了field的副本, 我是否必须使用索引,或者是否有其他方法可以修改该值?

推荐答案

简短而直接的答案:no, use the array index instead of the value

因此,上面的代码变为:

package main

import "fmt"

type MyType struct {
    field string
}

func main() {
    var array [10]MyType

    for idx, _ := range array {
        array[idx].field = "foo"
    }

    for _, e := range array {
        fmt.Println(e.field)
        fmt.Println("--")
    }
}

Go相关问答推荐

Go -SDP服务器读缓冲区不会更改任何内容

gorm插入不支持的数据

即使HTTP服务器正在使用GO和Protobuf、SQL Server启动,请求也不返回结果

Golang中的泛型 struct /接口列表

如何在S汇编器中更高效地将全局数据加载到霓虹灯寄存器?

使用Golang的Lambda自定义al2运行时,初始化阶段超时

从使用Golang otelmux检测的Otel跟踪中获取trace_id

包裹网.Conn导致挂起读取

未实现的 desc = 未知服务 pb.AuthService 我的简单身份验证服务器上出现错误

如何将 goose 迁移与 pgx 一起使用?

gopacket:IP-in-IP 数据包上的解码层

MQTT 客户端没有收到另一个客户端发送的消息

没有任务角色的 AWS CDK ECS 任务定义

Go:从 ssl 证书中获取 'subject/unstructeredName' 的值

如何在切片增长时自动将切片的新元素添加到函数参数

try 与 golang testify/suite 并行运行测试失败

Go 导入范围查找 protobuf 类型

为什么在 goroutine 中声明时,benbjohnson/clock 模拟计时器不执行?

有没有办法在golang中映射一组对象?

手动下载并放置一个 golang mod 文件