Go:在json响应中从数据库复制不同类型的数据

Go:在json响应中从数据库复制不同类型的数据,json,go,Json,Go,我试图从数据库中获取一组数据,并以json格式返回它们。然而,它们是不同的类型,我似乎在代码中使用了错误的返回类型 去: 我应该解决什么问题?您可以通过添加类型断言来修复编译器错误: s = append(s, Script{Id: m[i][0].(int), Type: m[i][1].(string), Created_at: m[i][2].(int)) 更好、更简单的方法是从ReadAllContent返回脚本对象片段: func ReadAllContent() []*Sc

我试图从数据库中获取一组数据,并以json格式返回它们。然而,它们是不同的类型,我似乎在代码中使用了错误的返回类型

去:


我应该解决什么问题?

您可以通过添加类型断言来修复编译器错误:

    s = append(s, Script{Id: m[i][0].(int), Type: m[i][1].(string), Created_at: m[i][2].(int))
更好、更简单的方法是从ReadAllContent返回脚本对象片段:

func ReadAllContent() []*Script {
    var result []*Script
    err := db.Ping()
    if err != nil {
        log.Fatal(err)
     }

    rows, err := db.Query("SELECT id, type, created_at FROM script WHERE user_id = $1", user_id)
    if err != nil {
        log.Fatal(err)
    }
    defer rows.Close()
    for rows.Next() {
        s := &Script{}
        err := rows.Scan(&s.ID, &s.Type, &s.Created_at)
        if err != nil {
            log.Fatal(err)      
        } 
        result = append(result, s)
    }
    return result
}
然后,您可以将ReadAllContent的返回直接编码为JSON:

 func pingHandler(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    if err := json.NewEncoder(w).Encode(&AllContent{New_content: ReadAllContent()}); err != nil {
      // handle error
    }
}

#挑剔:您已经命名了return参数,并且还返回了它。我想这是在golint(iirc…可能是错的)发现的。
func ReadAllContent() []*Script {
    var result []*Script
    err := db.Ping()
    if err != nil {
        log.Fatal(err)
     }

    rows, err := db.Query("SELECT id, type, created_at FROM script WHERE user_id = $1", user_id)
    if err != nil {
        log.Fatal(err)
    }
    defer rows.Close()
    for rows.Next() {
        s := &Script{}
        err := rows.Scan(&s.ID, &s.Type, &s.Created_at)
        if err != nil {
            log.Fatal(err)      
        } 
        result = append(result, s)
    }
    return result
}
 func pingHandler(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")
    if err := json.NewEncoder(w).Encode(&AllContent{New_content: ReadAllContent()}); err != nil {
      // handle error
    }
}