doulechou0700 2013-11-25 05:39
浏览 33
已采纳

范围引用代替值

I saw that range returns the key and the "copy" of the value. Is there a way for that range to return the adress of the item? Example

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

Here "field" is not modified because range sends the copy of field, Do I have to use index or is there any other way to modify the value?

Thanks for reading.

  • 写回答

1条回答 默认 最新

  • doutang2017 2015-04-07 18:02
    关注

    The short & direct answer: no, use the array index instead of the value

    So the above code becomes:

    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("--")
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗