Object pool design pattern in golang
You don't seem to have a policy for a maximum pool side. Is that by mistake or by design? What should happen if someone requests an object too many?
Your choice of method names is slightly off. When I talk to an object pool, I don't want to Loan it an object, nor do I want to Receive an object. I want to "borrow," "obtain," "take" or "get" an object from the pool, and I want to "return" or "release" or "put" an object back into the pool.

I'd suggest:

obj = pool.Borrow()
// ...
pool.Return(obj)

Finally, why does your object have an id? It seems unused. I'd suggest just using interface{} as your object type.