Birkaç gün önce başladı, yeni başlayanlar tamamlandı. Ben mongodb'a bağlanmak, arama yapmak, hizmet oluşturmak ve onu açısal olarak kullanmak istiyorum. Neredeyse her şeyi yaptım ama json.marshal() ile sorunum var. Birisi bana neyi yanlış yaptığımı söyleyebilir mi, yoksa daha iyi bir yolu var mı? thx :)Ben json.marshal ile gidiyorum
hatadır "./main.go:96: Birden çok değerli tek değerli bağlamında json.Marshal()" Bu işlevin belgelerine
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
}
EVET, thx adam bana bir kaç saat kurtardı: Yani sadece bu şekilde düzeltmek zorunda
: Buradaki sorun sadece o bu iki değeri elde etmek için bir değişken vermesidir : Cevabınızı birkaç dakika içinde kabul edeceğim – Arcagully