Después de consultar con especialistas en el tema, programadores de varias áreas y maestros dimos con la solución a la cuestión y la compartimos en esta publicación.
Solución:
la notación x.(T)
se llama aserción de tipo.
Para una expresión
x
de tipo de interfaz y un tipoT
la expresión principalx.(T)
afirma quex
no esnil
y que el valor almacenado enx
es de tipoT
.
Tu ejemplo:
result["args"].(map[string]interface)["foo"]
Significa que el valor de su results
mapa asociado con key "args"
es de tipo map[string]interface
(otro mapa con string
keys y cualquier valor). Y desea acceder al elemento de ese mapa asociado con el key "foo"
.
Si conoce el formato JSON de entrada, entonces sí, debe usar un genérico map[string]interface
escriba para procesarlo. Si conoce la estructura exacta del JSON de entrada, puede crear un struct
para que coincida con los campos esperados, y al hacerlo, puede descomponer un texto JSON en un valor de su personalizado struct
escriba, por ejemplo:
type Point struct
Name string
X, Y int
func main()
in := `"Name":"center","X":2,"Y":3`
pt := Point
json.Unmarshal([]byte(in), &pt)
fmt.Printf("Result: %+v", pt)
Producción:
Result: Name:center X:2 Y:3
Pruébalo en el Go Playground.
Modelando su entrada
Su entrada JSON actual podría modelarse con este tipo:
type Data struct
Args struct
Foo string
Y accediendo Foo
(pruébalo en el Go Playground):
d := Data
json.Unmarshal([]byte(in), &d)
fmt.Println("Foo:", d.Args.Foo)
Reseñas y puntuaciones del artículo
Agradecemos que quieras amparar nuestra investigación ejecutando un comentario y dejando una valoración te damos la bienvenida.