Как получить значение интерфейса {} в Go? (преобразование интерфейса: интерфейс {} - это Resp, а не интерфейс map[string]{})

В соответствии с этим вопросом и кодом Go сканируйте QueryRow на существующий интерфейс map[string]{} в Go, я пытаюсь получить ключ и значение data["id"]

func Login() func(c *lmhttp.Context, code int, data interface{}) (int, interface{}) {
    return func(c *lmhttp.Context, code int, data interface{}) (int, interface{}) {
    map_data := data.(map[string]interface{})
    fmt.Print(map_data, map_data["id"])
  }
}

но я всегда получал ошибку, как показано ниже, большое спасибо за любой совет.

interface conversion: interface {} is LoginResp, not map[string]interface {}

И я также вставляю свой код Response, как показано ниже:

func (c *Context) Response(data interface{}) {
    c.result(http.StatusOK, data)
}

🤔 А знаете ли вы, что...
В Go используется строгая статическая типизация.


56
1

Ответ:

Решено

Наконец, я получаю значение с помощью приведенного ниже кода, используйте Marshal, чтобы получить JSON данные, затем map и Unmarshal,

json_str, jsonErr := json.Marshal(data)
if json_str != nil {
    fmt.Printf("%v", jsonErr)
}
m := make(map[string]interface{})
err := json.Unmarshal([]byte(json_str), &m)
if err != nil {
    fmt.Println(err)
    fmt.Println("This is ID", m["id"])
}