Reflexión de Golang: no se pueden establecer campos de interfaz que envuelven una estructura

Estoy tratando de implementar un método que cambie el valor de los campos en un objeto que puede tener una estructura arbitraria. La conversión de los campos no es un problema cuando tengo el puntero a una estructura. Pero no puedo cambiar los campos cuando tengo una interfaz que no ajusta un puntero a una estructura sino a la estructura misma, en resumen:

// The following doesn't work
var x interface{} = A{Str: "Hello"}
// This panics: reflect: call of reflect.Value.Field on ptr Value
reflect.ValueOf(&x).Field(0).SetString("Bye")
// This panics: reflect: call of reflect.Value.Field on interface Value
reflect.ValueOf(&x).Elem().Field(0).SetString("Bye")
// This panics: reflect: reflect.Value.SetString using unaddressable value
reflect.ValueOf(&x).Elem().Elem().Field(0).SetString("Bye")
// This prints `false`. But I want this to be settable
fmt.Println(reflect.ValueOf(&x).Elem().Elem().Field(0).CanSet())

// This works
var z interface{} = &A{Str: "Hello"}
// This prints `true`
fmt.Println(reflect.ValueOf(z).Elem().Field(0).CanSet())

En mucho tiempo:http://play.golang.org/p/OsnCPvOx8F

he leídoLas leyes de la reflexión así que soy consciente de que solo puedo modificar campos cuando tengo un puntero a una estructura. Entonces mi pregunta es ahora:¿Cómo consigo el puntero a los datos de la estructura?

ACTUALIZAR:

Lo tengo funcionando usando básicamentey := reflect.New(reflect.TypeOf(x)) entonces los valores dey son configurables ahora. Para un ejemplo extenso, vea esto:https://gist.github.com/hvoecking/10772475

Respuestas a la pregunta(1)

Su respuesta a la pregunta