gpt4 book ai didi

json - 我被 json.marshal 困住了

转载 作者:IT老高 更新时间:2023-10-28 13:06:44 26 4
gpt4 key购买 nike

我完全是新手,几天前就开始了。我想连接到 mongodb、搜索、创建服务并将其用于 Angular。我已经做了几乎所有事情,但我对 json.marshal() 有疑问。有人可以告诉我我做错了什么,还是有更好的方法?谢谢 :)

错误是"./main.go:96: 单值上下文中的多值 json.Marshal()"

package main

import (
"encoding/json"
"flag"
"fmt"
"github.com/gorilla/mux"
"labix.org/v2/mgo"
"labix.org/v2/mgo/bson"
"log"
"net/http"
)

type warrior struct {
Name string `json:"name"`
LowDamage int `json:"low_damage"`
HighDamage int `json:"high_damage"`
Health int `json:"health"`
HealthLeft int `json:"health_left"`
Armor int `json:"armor"`
Id bson.ObjectId "_id,omitempty"
}

func getWarriors(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(200)
w.Write(mongo())
}

func main() {

// command line flags
port := flag.Int("port", 5001, "port to serve on")
dir := flag.String("random message 1", "web/", "random message 2")
flag.Parse()

// handle all requests by serving a file of the same name
fs := http.Dir(*dir)
fileHandler := http.FileServer(fs)

// ROUTES
router := mux.NewRouter()
router.Handle("/", http.RedirectHandler("/static/", 302))
router.HandleFunc("/warriors", getWarriors).Methods("GET")
router.PathPrefix("/static/").Handler(http.StripPrefix("/static", fileHandler))
http.Handle("/", router)

log.Printf("Running on port %d\n", *port)

addr := fmt.Sprintf("127.0.0.1:%d", *port)
err := http.ListenAndServe(addr, nil)
fmt.Println(err.Error())
}

func mongo() []byte {

session, err := mgo.Dial("mongodb://localhost:27017/test")
if err != nil {
panic(err)
}
defer session.Close()

// Optional. Switch the session to a monotonic behavior.
session.SetMode(mgo.Monotonic, true)

// select dm + table name
c := session.DB("test").C("warriors")

e := warrior{
Name: "first event",
LowDamage: 2,
HighDamage: 4,
Health: 40,
HealthLeft: 40,
Armor: 1,
}

// insert data
err = c.Insert(e)
if err != nil {
panic(err)
}

// search show results []warrior{} for all warrior{}
result := []warrior{}
// err = c.Find(bson.M{"name": "first event"}).One(&result)
err = c.Find(bson.M{"name": "first event"}).Limit(10).All(&result)
if err != nil {
panic(err)
}

b := json.Marshal(result)

log.Println("JSON:", result)
return b
}

最佳答案

查看这个函数的文档:http://golang.org/pkg/encoding/json/#Marshal

func Marshal(v interface{}) ([]byte, error)

它返回两个值。这里的问题是你只需给它一个变量来获取这两个值:

b := json.Marshal(result)

所以你只需要这样纠正它:

b, err := json.Marshal(result)

关于json - 我被 json.marshal 困住了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24158863/

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