2 回答
TA贡献1864条经验 获得超6个赞
显然,您不应该每次出现请求时都创建处理程序。他们从不释放内存,所以你最终会遇到内存不足的异常。
相反,将处理程序端点放入数组(切片)并使用 ONE 处理程序,该处理程序通过查看此切片中的 URL 来响应请求,然后从切片中删除不再需要的项目。
所以基本上,而不是
routeHtml := "/api/html/" + dir
http.HandleFunc(routeHtml, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
//writes Template to 'w' http.ResponseWriter
fmt.Fprintf(w, buf.String())
fmt.Println("successfull Operation 2 !!")
fmt.Println("")
job_2.Complete(health.Success)
}))
做
type JobInfo struct {
Path string
// some data here
}
// maybe global context
var jobs []JobInfo
// initialisation
jobs = make([]JobInfo, 0)
http.HandleFunc("/api/html/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
path := r.URL.Path
var job *JobInfo
for _, j := range jobs {
if j.Path == path {
job = &j
break
}
}
if job != nil {
// handle job request here
}
}))
// and then in the jobs' loop
handlers = append(handlers, JobInfo{"/api/html/" + dir, ...})
它会起作用,因为:
模式命名固定的根路径,如“/favicon.ico”,或根子树,如“/images/”(注意尾部斜杠)。较长的模式优先于较短的模式,因此如果“/images/”和“/images/thumbnails/”都注册了处理程序,则将为以“/images/thumbnails/”和前者开头的路径调用后一个处理程序将接收对“/images/”子树中任何其他路径的请求。
jobs当然,不要忘记清理数组。
TA贡献1860条经验 获得超9个赞
而不是使用切片最好使用地图
type JobInfo struct {
Path string
// some data here
}
// global context
var jobs map[string]JobInfo
// initialisation
jobs = make(map[string]JobInfoStruct)
http.HandleFunc("/api/html/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
path := r.URL.Path
var job JobInfoStruct
var ok bool
job, ok = jobs[path]
if ok {
// handle job request here
//then after delete the job
delete(jobs, path)
}
}))
// and then in the jobs' loop
pathVideo := "/api/html/" + dir
jobs[pathVideo] = JobInfoStruct{pathVideo, ...}
- 2 回答
- 0 关注
- 254 浏览
添加回答
举报