You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:57:22