Go 葛朗:网络状况会不会让一个net/http HandleFunc惊慌失措?

Go 葛朗:网络状况会不会让一个net/http HandleFunc惊慌失措?,go,Go,想想看,我有一个关键的功能,应该全部运行或什么都不运行 TakeMoneyFromSomeone() GiveMoneyToSomeoneElse() 我的问题是:当使用'net/http.HandleFunc时,我能相信Go函数不会在第1行和第2行之间出现恐慌吗?(这两个函数在我的http处理程序中) 我只关注网络问题。例如:如果客户端断开连接,或超时或正文过长,或其他任何情况。在第1行和第2行之间是否存在任何可能导致服务器死机的网络问题?(这两条线路不使用网络) 如果答案是否。如果我尝试R

想想看,我有一个关键的功能,应该全部运行或什么都不运行

TakeMoneyFromSomeone()
GiveMoneyToSomeoneElse()
我的问题是:当使用'net/http.HandleFunc时,我能相信Go函数不会在第1行和第2行之间出现恐慌吗?(这两个函数在我的http处理程序中)

我只关注网络问题。例如:如果客户端断开连接,或超时或正文过长,或其他任何情况。在第1行和第2行之间是否存在任何可能导致服务器死机的网络问题?(这两条线路不使用网络)


如果答案是否。如果我尝试
ResponseWriter.write
向关闭连接的客户端写入,会发生什么。它会死机吗?

HandlerFunc本身与任何潜在的网络问题无关,它只是将处理程序注册到url模式。

0超时时,它将挂起而不惊慌。更好的方法是使用超时并处理错误,而不是使用默认超时

通过创建自定义服务器,可以更好地控制服务器的行为:

s:=&http.Server{
地址:“:8080”,
Handler:myHandler,
读取超时:10*次。秒,
写入时间:10*次。秒,

MaxHeaderBytes:1HandlerFunc
本身与任何潜在的网络问题无关,它只是将处理程序注册到url模式。

对于0超时,它将挂起而不会死机。更好的方法是使用超时并处理错误,而不是使用默认超时

通过创建自定义服务器,可以更好地控制服务器的行为:

s:=&http.Server{
地址:“:8080”,
Handler:myHandler,
读取超时:10*次。秒,
写入时间:10*次。秒,

MaxHeaderBytes:1死机是程序员错误或其他不可恢复的情况。没有std库包因为正常错误情况而死机(第三个包也不应该死机,但我们显然不能保证)。整个问题是如何定义正常错误情况网络错误肯定处于“正常”状态类别;它们是使用网络时的一种预期情况。要重新表述,您应该只会因为编程错误而惊慌失措,即取消引用零指针、索引超出边界的切片、通过反射进行非法操作等。@Aminadav:Write
调用返回的
错误
应该是非零。@Aminadav:取决于它是如何关闭的,以及TCP连接的状态,因此您可能会或可能不会从写入中看到错误值。它永远不会死机。死机是程序员错误或其他一些不可恢复的情况。没有std库包会因正常错误情况而死机(第三个包也不应该,但我们显然不能保证).整个问题是你如何定义正常错误条件网络错误肯定是“正常”的类别;它们是使用网络时的一种预期情况。要重新表述,您应该只会因为编程错误而惊慌失措,即取消引用零指针、索引超出边界的切片、通过反射进行非法操作等。@Aminadav:Write调用返回的
错误
应该是非零。@Aminadav:取决于它是如何关闭的,以及TCP连接的状态,因此您可能会或可能不会从写入中看到错误值。它永远不会死机。
s := &http.Server{
    Addr:           ":8080",
    Handler:        myHandler,
    ReadTimeout:    10 * time.Second,
    WriteTimeout:   10 * time.Second,
    MaxHeaderBytes: 1 << 20,
}
log.Fatal(s.ListenAndServe())