首页 > 解决方案 > 尝试:除了:通过但在 Go 中?(当出现网络问题时让 Go 不会崩溃?)

问题描述

有时我尝试抓取页面(几个 RSS;s 和图像站点)但有时会出现连接错误时遇到问题

您如何处理 Go 错误而无需处理/处理而 Go 不会自行崩溃?

package main

import (
    "fmt"
    "math/rand"
    "sync"
    "time"
)

type Manager struct {
    threadCount                     int
}
var (
    message                 = map[string]interface{}{}
    messageMutex            = sync.RWMutex{}
)

func startGo(bManager Manager) {
    for{
        messageMutex.RLock()
        fmt.Println("hey")
        ScrapeImages()
        messageMutex.RUnlock()
    }
}    

func main() {
    rand.Seed(time.Now().UnixNano())
    
    stall := make(chan struct{})
    bManager := Manager{
        threadCount:     5,
    }

    for i := 0; i < bManager.threadCount; i++ {
        go startGo(bManager)
    }
    <-stall
}

标签: go

解决方案


Go 鼓励程序员处理错误而不是忽略它们。有关详细信息,请参阅此帖子:https ://blog.golang.org/error-handling-and-go

也就是说,Go 也不会“在出现网络问题时崩溃”。当出现问题时,这些net/http函数将返回错误,您可以在程序中根据需要处理这些错误。例如,在您的情况下ScrapeImages可能会返回一个error.

如果你有panicss 的代码,你可以用它recover来捕捉恐慌并以某种方式做出反应。except: pass正如您所提到的,在非常近似的方式上,这类似于 Python 的。例如,net/httpHTTP 服务器通过注销错误并继续服务其他请求来从处理程序中的恐慌中恢复。因此,处理一个请求时的恐慌不会导致整个服务器崩溃。


推荐阅读