How does golang read the value in an indeterminate json?

Hello everyone, I use golang to get an uncertain json, and parse it, because the data in json may be different each time, and there is no way to get it in the way of struct structure, so I use other methods, http://songran.net/2017/03/08.. I refer to this and use an interface,. Println this interface after converting json to byte, and see all the data. But I can"t use it. I don"t know how to call the value inside and find out how to get an uncertain json parsed data. Thank you
because the json is all key value and the first layer looks like map, but you can"t get it through the map method

.
Dec.17,2021

https://github.com/bitly/go-s.
I prefer to use packaged packages. If not for learning, there is no need to do so at the bottom.
this package has Get and GetPath methods and corresponding set methods.


interface {} parses the map [string] interface {} format, which only needs to be printed with assertions, as follows:
package main

import (

)
"encoding/json"
"fmt"

)

func main () {

s := `{
"tagA" : "json string",  
"tagB" : 1024, 
"tagC" : null, 
"tagD" : {
    "tagE" : 2147483648, 
    "tagF" : 3.14159265358979
},
"tagG" : [
    "json array",
   1024,
    {"tagH" : "json object"}
]

} `

var i interface{}
err := json.Unmarshal([]byte(s), &i)
if err != nil {
    fmt.Println(err)
}
fmt.Println(i)

Assert(i)

}

func Assert (i interface {}) {

switch t := i.(type) {
case map[string]interface{}:
    for k, v := range t {
        switch t1 := v.(type) {
        case map[string]interface{}:
            fmt.Println(k, " : ")
            Assert(t1)
        case []interface{}:
            fmt.Println(k, " : ")
            for k1, v1 := range t1 {
                switch t2 := v1.(type) {
                case map[string]interface{}:
                    fmt.Println(k1, " : ")
                    Assert(t2)
                default:
                    fmt.Println(k1, " : ", v1)
                }
            }
        default:
            fmt.Println(k, " : ", v)
        }
    }
}

}

MySQL Query : SELECT * FROM `codeshelper`.`v9_news` WHERE status=99 AND catid='6' ORDER BY rand() LIMIT 5
MySQL Error : Disk full (/tmp/#sql-temptable-64f5-1beaf71-311b9.MAI); waiting for someone to free some space... (errno: 28 "No space left on device")
MySQL Errno : 1021
Message : Disk full (/tmp/#sql-temptable-64f5-1beaf71-311b9.MAI); waiting for someone to free some space... (errno: 28 "No space left on device")
Need Help?