1. 首页
  2. 主题
  3. Go问与答

问个GO线程问题!!!!!!

hellsam · · 1615 次点击
~~~ 以下的函数 让他无限循环下去 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(&#34;http://127.0.0.1:8080/ntp&#34;) if err != nil { // panic(err) log.Println(&#34;错误信息:&#34;, err) // 这里直接去掉panic了 用log 程序也没有自动退出了 抓取的异常一样的,不知道这样写有什么BUG不 或则占用内存什么的不 } a.Body.Close() } ~~~
#4
更多评论
修改say增加异常处理部分代码: func Say(s string) { defer func() { // 必须要先声明defer,否则不能捕获到panic异常 fmt.Println(&#34;c&#34;) if err := recover(); err != nil { fmt.Println(err) // 这里的err其实就是panic传入的内容,55 } fmt.Println(&#34;d&#34;) }() fmt.Println(s) a, err := http.Get(&#34;http://127.0.0.1:&#34;) if err != nil { panic(err) } a.Body.Close() }
#1
修改say增加异常处理部分代码: ![image.png](https://static.studygolang.com/171217/8d71605c25e60e4de2d0293d94459370.png)
#2

用户登录

没有账号?注册

今日阅读排行

    加载中

一周阅读排行

    加载中