title: I'm stuck with json.marshal in go
body: <p>I'm complete newbie in go, started few days ago. I want to connect to mongodb, search, create a service and use it for angular. I've done almost everything but I have problem with json.marshal(). Can someone tell me what am I doing wrong, or is there a better way? thx :)</p>
  
  <p>The error is 
  "./main.go:96: multiple-value json.Marshal() in single-value context"</p>
  
  <pre><code>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(&amp;result)
      err = c.Find(bson.M{"name": "first event"}).Limit(10).All(&amp;result)
      if err != nil {
          panic(err)
      }
  
      b := json.Marshal(result)
  
      log.Println("JSON:", result)
      return b
  }
  </code></pre>