如何在Go应用中检测网络连接并输出指定提示信息?
优化HTTP请求的网络连接检查提示
我来帮你调整这段代码,让它在用户真的遇到网络连接问题时,给出精准清晰的提示,同时避免把其他类型的错误误判成网络问题~
首先咱们得明确:不是所有client.Do(req)返回的错误都是网络连接问题,比如请求创建失败、认证错误、服务器内部错误等都可能触发err,但这些情况不该提示用户检查网络。所以我们需要精准判断错误类型,只在确认是网络连接失败时显示指定提示。
优化后的代码实现
首先要导入errors和net包来做错误类型判断:
import ( "errors" "fmt" "net" "net/http" // 记得导入你的ui包 )
然后修改请求的错误处理逻辑:
client := &http.Client{} req, err := http.NewRequest("GET", url, nil) if err != nil { fmt.Println(err) ui.Failed("Failed to create request") return } req.SetBasicAuth(username, password) res, err := client.Do(req) if err != nil { var netErr net.OpError // 判断是否是TCP连接建立失败的错误(通常对应无网/无法连接服务器) if errors.As(err, &netErr) && netErr.Op == "dial" { ui.Failed("Please check your internet connection") } else { // 其他错误给出具体提示,方便排查 ui.Failed(fmt.Sprintf("Request failed: %v", err)) } return } defer res.Body.Close() // 别忘了关闭响应体,避免资源泄漏 // 后续处理响应的逻辑...
关键优化点说明
- 精准错误判断:通过
errors.As捕获net.OpError,并检查操作类型为"dial",这是TCP连接建立阶段的错误,基本可以确定是用户网络不通或者无法到达目标服务器。 - 区分错误场景:其他类型的错误(比如认证失败、服务器返回错误)会显示具体的失败原因,不会误导用户去检查网络。
- 资源泄漏防护:加上
defer res.Body.Close()确保响应体被正确关闭,避免不必要的资源占用。
内容的提问来源于stack exchange,提问作者Nagireddy Hanisha
相关产品推荐
相关产品推荐

