为了账号安全,请及时绑定邮箱和手机立即绑定

范围引用而不是值

范围引用而不是值

Go
白板的微信 2021-07-09 10:31:14
我看到该范围返回键和值的“副本”。该范围有没有办法返回项目的地址?例子package mainimport "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这里“字段”没有被修改,因为范围发送字段的副本,我必须使用索引还是有其他方法来修改值?
查看完整描述

3 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

评论中已经说过了,但是对于那些立即寻找答案的人来说,这里是如何通过使用指针切片并对原始代码进行最少更改来实现预期结果的方法。


package main


import "fmt"


type MyType struct {

    field string

}


func main() {

    // Slice of pointers instead of slice of type

    var array [10]*MyType


    // Initialize array manually

    for idx := range array {

        array[idx] = &MyType{}

    }


    for _, e := range array {

        e.field = "foo"

    }


    for _, e := range array {

        fmt.Println(e.field)

        fmt.Println("--")

    }


}


查看完整回答
反对 回复 2021-07-12
  • 3 回答
  • 0 关注
  • 238 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信