dongpeng7744 2018-01-13 15:56 采纳率: 100%
浏览 55
已采纳

HTTP客户端对不可用的URL发出请求时如何惊慌?

I need to make request to some URLs. It is possible, that someone of them is unavailable. It is OK for me, and I want just ignore these URLs.

My problem is I cannot catch error, which is occurs. I get a error message:

2018/01/13 18:46:24 Get http://fakesite.com: dial tcp [::1]:8084: connectex: No connection could be made because the target machine actively refused it.

My sample code is:

package main

import (
    "fmt"
    "log"
    "net/http"
    "io/ioutil"
)

func main() {
    c := make(chan string, 1)

    go func() {
        defer func() {
            if r := recover(); r != nil {
                fmt.Println("try to catch error1", r)
            }
        }()

        resp, err := http.Get("http://fakesite.com")
        if err != nil {
            log.Fatal(err)
            c <- ""
            return
        }

        defer resp.Body.Close()
        body, err := ioutil.ReadAll(resp.Body)
        if err != nil {
            log.Fatal(err)
            c <- ""
            return
        }

        c <- string(body)
    }()


    defer func() {
        if r := recover(); r != nil {
            fmt.Println("try to catch error2", r)
        }
    }()

    msg := <-c
    fmt.Println(msg)
}
  • 写回答

1条回答 默认 最新

  • doushu0591 2018-01-13 16:15
    关注

    The problem is:

    log.Fatal(err)
    

    This function performs two things. Firstly, it logs. But this function exits too.

    // Fatal is equivalent to Print() followed by a call to os.Exit(1).
    func Fatal(v ...interface{}) {
        std.Output(2, fmt.Sprint(v...))
        os.Exit(1)
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 对于知识的学以致用的解释
  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败