как передать golang карту по значению - PullRequest
0 голосов
/ 11 февраля 2020
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 по значению, а не по ссылке.

1 Ответ

0 голосов
/ 11 февраля 2020

Вы должны клонировать объект карты, чтобы сделать это. Тем не менее, я предполагаю, что вы не будете на самом деле; -).

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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...