実際に仕事でミスった話。
まあまずはソースコード。
go
package main
import (
"encoding/json"
"fmt"
)
type hoge struct {
m map[string]interface{}
}
func (h *hoge) load(text string) error {
var bytes = []byte(text)
return json.Unmarshal(bytes, &h.m)
}
func main() {
h := hoge{}
h.load(`{"foo":"bar"}`)
fmt.Println(h) //=> {map[foo:bar]}
h.load(`{"baz":"qux"}`)
fmt.Println(h) //=> {map[foo:bar baz:qux]}
}
上記のとおり。
要するに。
空っぽじゃない map を json.Unmarshal
に渡すと、もともと入っていた値は消されずに残る。
ドキュメントにもそう書いてある。
まあ、オブジェクトを使いまわしたのが敗因だね。
毎回ちゃんと綺麗な体で仕事に当たろうというのが今回の教訓かな。