Как передать карту в качестве значения? - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть несколько актеров в моем приложении Golang, для работы которых требуются две карты.Эти карты генерируются некоторыми интенсивными транзакциями базы данных, поэтому я не хочу делать это в каждом акторе, в результате я отделил генерацию карт от актеров.

Проблема, с которой я сталкиваюсь при таком подходе, заключается в том, что, если я передаю эти карты каждой из них, они передаются по ссылке, что вызывает панику, когда я пишу и читаю одновременно.

Мое решение для этого заключалось в том, чтобы маршал и демаршал эти карты каждый раз, когда они передаются новому актеру, но я хочу знать, есть ли лучшее решение для этого.

1 Ответ

0 голосов
/ 13 декабря 2018

Копирование карты в цикле будет дешевле.Ориентир безусловно. игровая площадка

package main

import (
    "fmt"
)

func main() {
    src := map[string]string{`one`: `one1`, `two`: `two1`, `three`: `tree1`}     
    dst := mapClone(src)
    delete(src, `one`)
    fmt.Println(src)
    fmt.Println(dst)
}

func mapClone(src map[string]string) map[string]string {
    dst := make(map[string]string, len(src))
    for k, v := range src {
        dst[k] = v
    }
    return dst
}
...