如果需要提供一个API来让服务器退出,可以这么写:
func run(ctx contex.Context) {
server := &http.Server{Addr: addr, Handler: nil}
ctx, cancel := context.WithCancel(ctx)
http.HandleFunc("/quit", func(w http.ResponseWriter, r *http.Request) {
cancel() // 使用局部的ctx和cancel
})
go func() {
select {
case <-ctx.Done():
server.Close()
}
}()
fmt.Println(server.ListenAndServe())
}
使用局部的ctx和cancel,可以避免cancel传入的ctx,只是影响当前的ctx。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易采站长站。










