gpt4 book ai didi

go - 将数据从 Datastore 传递到 http.Writer

转载 作者:IT王子 更新时间:2023-10-29 02:07:54 24 4
gpt4 key购买 nike

我最近了解到了被称为 go 的语言的奇妙之处。我为自己设定了一项任务,即使用 GoLang 和 Google 的数据存储编写 RESTful API。我能够从数据存储中检索数据并使用 fmt.Println 将其打印到控制台,但是当我尝试使用数据存储中的数据并将其传递到 http 时,问题就出现了。处理程序

我想知道是否有人可以告诉我哪里出了问题,甚至可以指出正确的方向。

这是我到目前为止所做的

 package main

import (
"log"
"fmt"
"context"
"net/http"
// "encoding/json"
"cloud.google.com/go/datastore"
)

type Item struct {
Id string `datastore:"id"`
Name string `datastore:"title"`
View int `datastore:"views"`
Brand string `datastore:"brand"`
id int64 // interger from "Name/ID" fild in datastore entities list
}

func main() {
http.HandleFunc("/", ListTasks)
http.ListenAndServe(":8080", nil)
}

//func ListTasks(w http.ResponseWriter, r *http.Request) ([]*Item, error) {
func ListTasks(w http.ResponseWriter, r *http.Request) {
ctx := context.Background()

client, err := datastore.NewClient(ctx, "my-client")
if err != nil {
log.Fatalln(err)
}

var tasks []*Item

query := datastore.NewQuery("my-query")
keys, err := client.GetAll(ctx, query, &tasks)
if err != nil {
return nil, err
}

for i, key := range keys {
tasks[i].id = key.ID
}

return tasks, nil
}

我也研究过 http Wrappers,但我不知道是否 100% 需要使用包装器,或者我是否只是在我的盘子里添加更多。

最佳答案

我删除了 return tasks, nil 因为它似乎是不必要的,将 return, nil err 修改为 log.Fatalln(nil, err ) 并且还按照@ThunderCat 和@tkausl 的指示对tasks 进行了编码。我的问题已经解决了,谢谢。

这是我的工作代码

package main

import (
"log"
"context"
"net/http"
"encoding/json"
"cloud.google.com/go/datastore"
)

type Item struct {
Id string `datastore:"id"`
Name string `datastore:"title"`
View int `datastore:"views"`
Brand string `datastore:"brand"`
id int64 // interger from "Name/ID" fild in datastore entities list
}

func main() {
http.HandleFunc("/", ListTasks)
http.ListenAndServe(":8080", nil)
}

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

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

ctx := context.Background()

client, err := datastore.NewClient(ctx, "my-client")
if err != nil {
log.Fatalln(err)
}

var tasks []*Item

query := datastore.NewQuery("my-query")
keys, err := client.GetAll(ctx, query, &tasks)
if err != nil {
log.Fatalln(nil, err)
}
for i, key := range keys {
tasks[i].id = key.ID
}

json.NewEncoder(w).Encode(tasks)
// return tasks, nil
}

它现在返回 [{"Id":"24X660","Name":"Fiesta","View":129,"Brand":"Ford"}]

同时感谢@static_cast 纠正了我的格式错误。

关于go - 将数据从 Datastore 传递到 http.Writer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54383208/

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