diff --git a/tools/goctl/api/gogen/sse_handler.tpl b/tools/goctl/api/gogen/sse_handler.tpl index 722167095..84aea28b8 100644 --- a/tools/goctl/api/gogen/sse_handler.tpl +++ b/tools/goctl/api/gogen/sse_handler.tpl @@ -30,11 +30,10 @@ func {{.HandlerName}}(svcCtx *svc.ServiceContext) http.HandlerFunc { // w.Header().Set("Cache-Control", "no-cache") // w.Header().Set("Connection", "keep-alive") client := make(chan {{.ResponseType}}, 16) - defer func() { - close(client) - }() + l := {{.LogicName}}.New{{.LogicType}}(r.Context(), svcCtx) threading.GoSafeCtx(r.Context(), func() { + defer close(client) err := l.{{.Call}}({{if .HasRequest}}&req, {{end}}client) if err != nil { logc.Errorw(r.Context(), "{{.HandlerName}}", logc.Field("error", err)) @@ -44,7 +43,10 @@ func {{.HandlerName}}(svcCtx *svc.ServiceContext) http.HandlerFunc { for { select { - case data := <-client: + case data, ok := <-client: + if !ok { + return + } output, err := json.Marshal(data) if err != nil { logc.Errorw(r.Context(), "{{.HandlerName}}", logc.Field("error", err))