Как передать карту в качестве значения?
У меня есть несколько актеров в моем приложении Golang, для работы которых требуются две карты. Эти карты генерируются некоторыми интенсивными транзакциями базы данных, поэтому я не хочу делать это в каждом акторе, в результате я отделил генерацию карт от актеров.
Проблема, с которой я сталкиваюсь при таком подходе, состоит в том, что, если я передаю эти карты каждой из них, они передаются по ссылке, что вызывает панику, когда я пишу и читаю одновременно.
Мое решение было для Маршала и Унмаршала эти карты каждый раз, когда они передаются новому Актеру, но я хочу знать, есть ли лучшее решение для этого.
1 ответ
Копирование карты в цикле будет дешевле. Ориентир безусловно. пойти на площадку
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
}