I don't believe this is possible, in general. For example, consider
type S struct {
A *int
B *int
}
var x S
x.A = new(int)
x.B = x.A
There is no single expression for the value of x. Or
type P *P
x := new(P)
*x = x
Then you have values which represent more than just their plain memory resources. For example, an *os.File - restoring that would not give you the same thing.
There's lots of design space here and I don't think you can solve it in full generality. So, at the very least, you have to be very deliberate about what you want and what you are willing to give up.
But. Maybe someone else has suggestions for a library doing an approximation of this you'd like better.