Golang como fazer asserção de tipo para interface desconhecida?

Entendo que posso obter o valor de um objeto por reflexão e, em seguida, use a asserção de tipo para recuperar o objeto real usando:

obj := new(User)
out := reflect.ValueOf(obj).Elem().Interface().(User)
fmt.Println(out == *obj) // true

Mas e se eu não souber que o tipo do objeto éUser, como posso fazer asserção de tipo? Digamos que estava dentro de uma função como:

func Foo(obj interface{}) bool {
    // out := reflect.ValueOf(obj).Elem().Interface().( ... )
    return out == *obj
}

func main() {
    obj := new(User)
    fmt.Println(Foo(obj))
}

Dentro deFoo Você nunca saberá que tipo de objeto será realmente transmitido e, portanto, como você completa a asserção de tipo?

questionAnswers(1)

yourAnswerToTheQuestion