この例では、valueというsyncmapのキー "xxxxxxx"に1を格納しようとしています。値の型はインタフェース{}です。だから、私はそれをsyncmap.Mapにするための型アサーションを持っています。これはmmです。次に、新しいエントリをmmに追加します。残念ながら、新しいエントリは、valueに追加されず、mmにしかなりません。 mmのように見えるのはコピーか何かです。私はこの作業をどうやって行うのか分かりません。syncmap.Mapにエントリを追加する方法
具体的には、エントリを追加するためにタイプアサーションを行う必要があることを具体的に示しています。しかし、私は、型アサーションがコピーを作っていると思います。エントリ( "xxxxxxx"、1)がvalueというsyncmapに実際に追加されるように、これを行う方法についてアドバイスできますか?
func Test(name string, m syncmap.Map) {
log.Print(name, " ")
m.Range(func(key, value interface{}) bool {
log.Println(">>", value)
mm := value.(syncmap.Map)
mm.Store("xxxxxxx", 1)
PrintMap(">>>>>>>>>>>>> " + key.(string), value.(syncmap.Map))
return true
})
log.Println()
}
私はあなた 'syncmap.Map'の種類が何であるか知らないが、チャンスはそれがコピーされるべきではないです。あなたのコードで 'go vet'を実行することから始めます。 – JimB
syncmap.Mapの実装を見て間違っているかどうかは分かりません。 https://play.golang.orgで実行可能な例を作りましょう。 – Peter
これは 'x/sync'リポジトリからの古い' sync.Map'実装です。この場合、あなたはほとんど確実にコピーできませんが、 'vet'はすぐにそれを指摘しなければなりません。 – JimB