Skip to content

Instantly share code, notes, and snippets.

@manuelkiessling
Created August 7, 2012 11:06
Show Gist options
  • Save manuelkiessling/3284568 to your computer and use it in GitHub Desktop.
Save manuelkiessling/3284568 to your computer and use it in GitHub Desktop.
Go map with pointers to structs / with structs
package webservice
import (
"io"
"io/ioutil"
"net/http"
"encoding/json"
"github.com/bmizerany/pat"
"manuel.kiessling.net/multivariate/runner/types"
// "fmt"
)
var experiments = make(map[string]types.Experiment)
func AddExperiment(res http.ResponseWriter, req *http.Request) {
body, _ := ioutil.ReadAll(req.Body)
data := make(map[string]string)
json.Unmarshal(body, &data)
experiment := types.Experiment{}
experiment.Name = data["name"]
experiment.SetUrl(data["url"])
experiments[data["url"]] = experiment
}
func GetExperiments(res http.ResponseWriter, req *http.Request) {
url := req.FormValue("url")
experiment := experiments[url]
if experiment.Name != "" {
io.WriteString(res, "OK: " + url + " " + experiment.Name)
} else {
io.WriteString(res, "FAIL: " + url)
}
}
func NewMux() (mux *pat.PatternServeMux) {
mux = pat.New()
mux.Get("/experiments/", http.HandlerFunc(GetExperiments))
mux.Post("/experiments/", http.HandlerFunc(AddExperiment))
return mux
}
package webservice
import (
"io"
"io/ioutil"
"net/http"
"encoding/json"
"github.com/bmizerany/pat"
"manuel.kiessling.net/multivariate/runner/types"
// "fmt"
)
var experiments = make(map[string]*(types.Experiment))
func AddExperiment(res http.ResponseWriter, req *http.Request) {
body, _ := ioutil.ReadAll(req.Body)
data := make(map[string]string)
json.Unmarshal(body, &data)
experiment := new(types.Experiment)
experiment.Name = data["name"]
experiment.SetUrl(data["url"])
experiments[data["url"]] = experiment
}
func GetExperiments(res http.ResponseWriter, req *http.Request) {
url := req.FormValue("url")
experiment := experiments[url]
if experiment != nil {
io.WriteString(res, "OK: " + url + " " + (*experiment).Name)
} else {
io.WriteString(res, "FAIL: " + url)
}
}
func NewMux() (mux *pat.PatternServeMux) {
mux = pat.New()
mux.Get("/experiments/", http.HandlerFunc(GetExperiments))
mux.Post("/experiments/", http.HandlerFunc(AddExperiment))
return mux
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment