print interfaces golang from check map interface go

interfaces - golang print map



Convertir mapa[interfaz{}] interfaz{} para mapear[cadena] cadena (3)

Quizás malinterpreto la pregunta, pero ¿funcionaría esto?

m := make(map[interface{}]interface{}) m["foo"] = "bar" m2 := make(map[string]string) for key, value := range m { switch key := key.(type) { case string: switch value := value.(type) { case string: m2[key] = value } } }

De una fuente en la que no puedo influir, recibo datos en un mapa, que llega como map[interface {}]interface {} .

Necesito procesar los datos contenidos, preferiblemente como map[string]string (los datos dentro son perfectamente adecuados para eso).

También necesito generar una lista de las claves a partir de los datos, ya que no se conocen de antemano.

La mayoría de las preguntas similares que pude encontrar en la web dicen más o menos que esto es imposible, pero si mi mapa es m , fmt.Println(m) muestra que los datos están allí, legibles como map[k0:v0 K1:v1 k2:v2 ... ] .

¿Cómo puedo hacer lo que fmt.Println puede hacer?


// data is map[string]interface{} form := make(map[string]string) for k, v := range data { form[k] = v.(string) }


Una forma segura de procesar interfaces desconocidas, simplemente use fmt.Sprintf ()

https://play.golang.org/p/gOiyD4KpQGz

package main import ( "fmt" ) func main() { mapInterface := make(map[interface{}]interface{}) mapString := make(map[string]string) mapInterface["k1"] = 1 mapInterface[3] = "hello" mapInterface["world"] = 1.05 for key, value := range mapInterface { strKey := fmt.Sprintf("%v", key) strValue := fmt.Sprintf("%v", value) mapString[strKey] = strValue } fmt.Printf("%#v", mapString) }