美文网首页
对 golang range 行为的一个误解

对 golang range 行为的一个误解

作者: 逆麟囧 | 来源:发表于2015-06-12 14:20 被阅读77次

代码如下

package main

import (
    "fmt"
)

type Data struct {
    n int
}

func main() {
    data := []Data{
        {1}, {2}, {3},
    }

    // code 1
    res1 := []*Data{}
    for _, one := range data {
        res1 = append(res1, &one)
    }

    fmt.Println("res1", res1)

    // code 2
    res2 := []*Data{}
    var one Data
    for i := 0; i < len(data); i++ {
        one = data[i]
        res2 = append(res2, &one)
    }
    fmt.Println("res2:", res2)

    // code 3
    res3 := []*Data{}
    for i := 0; i < len(data); i++ {
        res3 = append(res3, &data[i])
    }
    fmt.Println("res3:", res3)
}

本以为 range 是类似 code 3 中的行为, 实际上是 code 2 的行为.
也即 res1 中的三个元素都是同一个指针.
记下来.

相关文章

  • 对 golang range 行为的一个误解

    代码如下 本以为 range 是类似 code 3 中的行为, 实际上是 code 2 的行为.也即 res1 中...

  • golang 新手容易遇到的坑

    Golang Range关键字的秘密

  • Learn Golang in Days - Day 11

    Learn Golang in Days - Day 11 要点 Range Go语言中range关键字用于for...

  • golang for,range的坑

    for,range 的k,v变量在整个遍历过程中共用,不能直接进行引用传递,即地址传递,但循环内定义的变量只能为当...

  • golang使用指针修改数据引起的血案

    背影知识:golang 中的struct和slice为值赋值, map为引用赋值;range语句for k, v ...

  • [golang] for ... range指针的坑

    话不多说,看代码知道输出结果么? 输出结果 for range每次循环使用的是同一个临时变量!每次都是做了一次值拷...

  • golang range的实现原理

    1. 前言 range是Golang提供的一种迭代遍历手段,可操作的类型有数组、切片、Map、channel等,实...

  • Go 学习

    go语言局部变量分配在栈还是堆Golang 垃圾回收剖析go语言坑之for range

  • golang slice的误解

    slice的介绍: 在golang的官方文档中,我们发现golang除了有array的数据还有一个slice,而a...

  • 2017.5 德州心得

    思考要快速,观察完对手行为之后对牌的range迅速做出判断 不要只看自己手里牌,要看对手行为和牌力 不能只根据自己...

网友评论

      本文标题:对 golang range 行为的一个误解

      本文链接:https://www.haomeiwen.com/subject/tvvjqttx.html