~~~
以下的函数 让他无限循环下去 GO线程 访问httpURL 我后期要制作window服务的,
但是测试下来 当http://127.0.0.1:8080/ntp 一旦无法打开访问的时候 这个线程就挂掉了 我在开启也没用了不在执行了
想问下如何解决这个问题呢 当URL无法访问的时候线程不停止或则休眠什么的, 直到URL再次能访问继续执行
func main() {
for i := 0; i < 10; i++ {
sss := strconv.Itoa(i)
go Say("ceshi " + sss)
if i >= 8 {
i = 0
}
time.Sleep(5 * time.Second)
}
}
func Say(s string) {
fmt.Println(s)
a, err := http.Get("http://127.0.0.1:8080/ntp")
if err != nil {
panic(err)
}
a.Body.Close()
}
~~~
~~~
<a href="/user/kangyunqiang" title="@kangyunqiang">@kangyunqiang</a>
我刚才这样改了下 貌似也可以
func Say(s string) {
fmt.Println(s)
a, err := http.Get("http://127.0.0.1:8080/ntp")
if err != nil {
// panic(err)
log.Println("错误信息:", err) // 这里直接去掉panic了 用log 程序也没有自动退出了 抓取的异常一样的,不知道这样写有什么BUG不 或则占用内存什么的不
}
a.Body.Close()
}
~~~
#4
更多评论
修改say增加异常处理部分代码:
func Say(s string) {
defer func() { // 必须要先声明defer,否则不能捕获到panic异常
fmt.Println("c")
if err := recover(); err != nil {
fmt.Println(err) // 这里的err其实就是panic传入的内容,55
}
fmt.Println("d")
}()
fmt.Println(s)
a, err := http.Get("http://127.0.0.1:")
if err != nil {
panic(err)
}
a.Body.Close()
}
#1
修改say增加异常处理部分代码:
![image.png](https://static.studygolang.com/171217/8d71605c25e60e4de2d0293d94459370.png)
#2