package handler import ( "fmt" "github.com/imkira/go-observer" "net/http" "strconv" ) type Value struct { Value int } func SyncFactory(obs observer.Property) HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { refId, err := strconv.Atoi(r.URL.Query().Get("ref")) if err != nil { refId = -1 } stream := obs.Observe() var value Value for { value = stream.Value().(Value) if value.Value > refId { break } select { case <-stream.Changes(): stream.Next() } } w.Header().Add("Content-Type", "text/plain") fmt.Fprintf(w, "%d (%d)\n", value.Value, refId) } }