gpt4 book ai didi

json - Go:在json响应中从数据库复制各种类型的数据

转载 作者:数据小太阳 更新时间:2023-10-29 03:07:20 26 4
gpt4 key购买 nike

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

开始:

type Script struct {
Id int `json:"id"`
Type string `json:"type"`
Created_at int `json:"created_at"`
}

type AllContent struct {
New_content []*Script `json:"new_content,omitempty"`
}

func ReadAllContent() [][]interface{} {
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()
var Type string
var created_at, id int
for rows.Next() {
err := rows.Scan(&id, &Type, &created_at)
if err != nil {
log.Fatal(err)
}
var a []interface{}
var b []interface{}
a = append(a, id, Type, created_at)
b = append(b, a)
}
return b
}

func pingHandler(w http.ResponseWriter, r *http.Request) {

var s []Script
resp := AllContent{New_content: []*Script{}}
m := ReadAllContent()

for i := 0; i < len(m); i++ {
s = append(s, Script{Id: m[i][0], Type: m[i][1], Created_at: m[i][2])
}
for i := 0; i < len(m); i++ {
resp.New_content = append(resp.New_content, &s[i])
}

w.Header().Set("Content-Type", "application/json")

js, _ := json.Marshal(resp)
w.Write(js)
}

我收到这个错误:

cannot use m[i][0] (type interface {}) as type int in field value: need type assertion

我应该解决什么问题?

最佳答案

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

    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
}
}

关于json - Go:在json响应中从数据库复制各种类型的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26132236/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com