Return pointer to local struct
Solution 1:
Go performs pointer escape analysis. If the pointer escapes the local stack, which it does in this case, the object is allocated on the heap. If it doesn't escape the local function, the compiler is free to allocate it on the stack (although it makes no guarantees; it depends on whether the pointer escape analysis can prove that the pointer stays local to this function).
Solution 2:
The Golang "Documentation states that it's perfectly legal to return a pointer to local variable." As I read here
https://groups.google.com/forum/?fromgroups=#!topic/golang-nuts/EYUuead0LsY
I looks like the compiler sees you return the address and just makes it on the heap for you. This is a common idiom in Go.