]> Cypherpunks repositories - gostls13.git/commitdiff
further pedagogy: a channel that satisfies the HTTP server interface
authorRob Pike <r@golang.org>
Thu, 5 Feb 2009 23:56:31 +0000 (15:56 -0800)
committerRob Pike <r@golang.org>
Thu, 5 Feb 2009 23:56:31 +0000 (15:56 -0800)
R=rsc
DELTA=18  (18 added, 0 deleted, 0 changed)
OCL=24482
CL=24484

src/lib/http/triv.go

index 136100135a28d3845d2e45f886340636797c778a..3c527310edb1f3a9d47065d7eca533e259b56b2f 100644 (file)
@@ -45,11 +45,29 @@ func FileServer(c *http.Conn, req *http.Request) {
        fmt.Fprintf(c, "[%d bytes]\n", n);
 }
 
+// a channel (just for the fun of it)
+type Chan chan int
+
+func ChanCreate() Chan {
+       c := make(Chan);
+       go func(c Chan) {
+               for x := 0;; x++ {
+                       c <- x
+               }
+       }(c);
+       return c;
+}
+
+func (ch Chan) ServeHTTP(c *http.Conn, req *http.Request) {
+       io.WriteString(c, fmt.Sprintf("channel send #%d\n", <-ch));
+}
+
 func main() {
        flag.Parse();
        http.Handle("/counter", new(Counter));
        http.Handle("/go/", http.HandlerFunc(FileServer));
        http.Handle("/go/hello", http.HandlerFunc(HelloServer));
+       http.Handle("/chan", ChanCreate());
        err := http.ListenAndServe(":12345", nil);
        if err != nil {
                panic("ListenAndServe: ", err.String())