登录
首页 >  Golang >  Go问答

传递golang映射的值

来源:stackoverflow

时间:2024-03-11 18:54:15 258浏览 收藏

各位小伙伴们,大家好呀!看看今天我又给各位带来了什么文章?本文标题《传递golang映射的值》,很明显是关于Golang的文章哈哈哈,其中内容主要会涉及到等等,如果能帮到你,觉得很不错的话,欢迎各位多多点评和分享!

问题内容

AMap := make(map[int]int)
BMap := make(map[int]map[int]int)
var usersK []int
for i := 0; i < 10; i++ {
    var k int
    fmt.Scan(&k)
    AMap[k]++
    BMap[i] = AMap
}

在这种情况下,bmap 中的所有值都是同一个映射。如何通过值而不是引用传递 amap。


解决方案


你必须克隆地图对象才能做到这一点。不过,我想你不会真的;-)。

package main

import (
    "bytes"
    "encoding/gob"
    "fmt"
    "reflect"
)

func Clone(a interface{}) interface{} {
    buff := new(bytes.Buffer)
    v := reflect.New(reflect.TypeOf(a))
    gob.NewEncoder(buff).Encode(a)
    gob.NewDecoder(buff).Decode(v.Interface())
    return v.Elem().Interface()
}

func main() {
    AMap := make(map[int]int)
    BMap := make(map[int]map[int]int)
    K := []int{9,8,7,6,5,4,3,2,1,0}
    for i := 0; i < 10; i++ {
        k := K[i]
        AMap[k]++
        BMap[i] = Clone(AMap).(map[int]int)
    }
    fmt.Println(BMap)
}

理论要掌握,实操不能落!以上关于《传递golang映射的值》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>