It is not the case that "a parameter of type interface can accept an address to something that implements that interface". Quite the opposite.
Your concrete foo does not implement the interface face. It doesn't.
*foo does which is a different type in Go.
You can only assign
*foo to variables of type face. (Okay, there is some sugar in Go which might let you an addressable foo to a face, but here the process of taking the pointer is automatic).
Take a look at the language spec and the type system.