美文网首页
go1.7 for--range遍历的那些小坑

go1.7 for--range遍历的那些小坑

作者: 秸秆混凝烧结工程师 | 来源:发表于2021-12-12 20:29 被阅读0次

    package main

    import "fmt"

    // for ...range 遍历的的小坑
    // 这里的想法就是给M赋值 预计输出
    /*

    0 ===> 0
    1 ===> 1
    2 ===> 2
    3 ===> 3

    但是实际输出的是
    0 ===> 0
    1 ===> 1
    2 ===> 2
    3 ===> 3

    那么这是为什么?
    原因在于每次拷贝的都是一个元素的副本,然后遍历的value都是对同一个同一个元素的遍历赋值,
    如果直接对VALUE 取地址将会拿到同一个地址,对应的值就是最后遍历的元素值赋值给Value

    可以看一下 for循环原码
    /
    """
    func main() {
    slice := []int{0, 1, 2, 3}
    m := make(map[int]
    int)
    // 方法一 : 可以保存一些前一个元素值
    for key, val := range slice {
    //val := val 局部val替代val
    m[key] = &val
    fmt.Println(m)
    }

    for key, _ := range slice {
    
        //方法2 : 直接索引获取原来的值
        m[key] = &slice[key]
    
    }
    
    for k, v := range m {
        fmt.Println(k, "===>", *v)
    }
    

    }
    """

    /* 输出

    0 ===> 3
    1 ===> 3
    2 ===> 3
    3 ===> 3
    */

    相关文章

      网友评论

          本文标题:go1.7 for--range遍历的那些小坑

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