golang's encoding/json package likes to ensure that the
1. you read 12MB into memory
2. encoding/json will first scan the full text to ensure it is a well-formed json (before populating the structure)
3. At a later point, GC will reclaim that memory
4. This means that if each GET request is doing this 12MB decode, you will start getting memory pressure.
I think this is a design problem more so. You can help with #1 and #3 and #4 above: do not read up the 12MB into memory, but instead use a json.NewDecoder(os.OpenFile(...)).Decode(...). However, to tackle #2, you may need to examine a different decoder. Try package:
github.com/ugorji/go (
https://godoc.org/github.com/ugorji/go/codec ).