最近向我介绍了一种叫做 go 的语言的奇妙之处。我设定了使用GoLang和Google的数据存储区编写RESTful API的任务。我可以从数据存储中检索数据,并使用fmt.Println
将其打印到控制台,但是当我尝试使用数据存储中的数据并将其传递给 http.Handler 时,问题就开始了。
我想知道是否有人可以告诉我我要去哪里,或者甚至指向正确的方向。
这是我到目前为止所做的
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%使用包装器,或者只是在盘子中添加更多内容。
答案 0 :(得分:1)
我删除了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纠正我的格式错误。