package main import ( "fmt" // just an optional helper "io" "time" // showcase the delay "github.com/kataras/iris" "github.com/kataras/iris/context" ) func main() { app := iris.New() timeWaitForCloseStream := 4 * time.Second app.Get("/", func(ctx context.Context) { i := 0 // goroutine in order to no block and just wait, // goroutine is OPTIONAL and not a very good option but it depends on the needs // Look the streaming_simple_2 for an alternative code style // Send the response in chunks and wait for a second between each chunk. go ctx.StreamWriter(func(w io.Writer) bool { i++ fmt.Fprintf(w, "this is a message number %d\n", i) // write time.Sleep(time.Second) // imaginary delay if i == 4 { return false // close and flush } return true // continue write }) // when this handler finished the client should be see the stream writer's contents // simulate a job here... time.Sleep(timeWaitForCloseStream) }) app.Get("/alternative", func(ctx context.Context) { // Send the response in chunks and wait for a second between each chunk. ctx.StreamWriter(func(w io.Writer) bool { for i := 1; i <= 4; i++ { fmt.Fprintf(w, "this is a message number %d\n", i) // write time.Sleep(time.Second) } // when this handler finished the client should be see the stream writer's contents return false // stop and flush the contents }) }) app.Run(iris.Addr(":8080")) }