Tôi là người mới hoàn thành khi di chuyển, bắt đầu vài ngày trước. Tôi muốn kết nối với mongodb, tìm kiếm, tạo một dịch vụ và sử dụng nó cho góc cạnh. Tôi đã làm gần như tất cả mọi thứ nhưng tôi có vấn đề với json.marshal(). Ai đó có thể cho tôi biết tôi đang làm gì sai, hoặc có cách nào tốt hơn không? thx :)Tôi bị kẹt với json.marshal khi di chuyển
Lỗi này là "./main.go:96: nhiều giá trị json.Marshal() trong bối cảnh đơn giá trị"
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
}
YES, thx người đàn ông bạn đã cứu tôi một vài giờ : DI sẽ chấp nhận câu trả lời của bạn sau vài phút – Arcagully