Go cannot range over (type interface {})

后端 未结 2 400
野性不改
野性不改 2021-02-01 06:30

I\'m in the infant stages of trying to wrap my mind around Go. At the moment, I\'m simulating an API request that returns a JSON-formatted string containing an array of objects.

2条回答
  •  故里飘歌
    2021-02-01 06:43

    The defaults that the json package will decode into when the type isn't declared are:

    bool, for JSON booleans
    float64, for JSON numbers
    string, for JSON strings
    []interface{}, for JSON arrays
    map[string]interface{}, for JSON objects
    nil for JSON null
    

    Since each record is (in your example) a json object, you can assert each one as a map[string]interface{} like so:

    for _, record := range view {
        log.Printf(" [===>] Record: %s", record)
    
        if rec, ok := record.(map[string]interface{}); ok {
            for key, val := range rec {
                log.Printf(" [========>] %s = %s", key, val)
            }
        } else {
            fmt.Printf("record not a map[string]interface{}: %v\n", record)
        }
    }
    

提交回复
热议问题