Thanks Matthew, that does, in fact, make i == nil.
Thinking about how I'd do this in C, this makes sense: To expect some variable to be side-effected, you must pass in a pointer to it so that the consumer can dereference and write into the memory.
In Go, I think the problem is that if you don't add the layer of indirection (passing in &i), the value is not settable according to the 3rd Law of Reflection. In order for the JSON library to side effect the variable, it must do an Elem() of the interface value passed in. For pointers, Elem() follows the reference into the actual value.
Let me know if I misunderstand any of that.
thanks, Eddy