Go 中 for 循环中的错误处理可能会导致下一次迭代

我为将日志文件发送到不同位置的特定 Go 实现而苦苦挣扎:


package main


func isDestinationSIEM(json_msg string, json_obj *jason.Object, siem_keys []string) (bool) {

    if json_obj != nil {

        dest, err := json_obj.GetString("destination")

        if err == nil {

            if strings.Contains(dest,"SIEM") {

                return true

            }

        }


        for _, key :=  range siem_keys {

            if strings.Contains(json_msg, key) {

                return true

            }

        }

    }

    return false

}


func sendToSIEM(siem_dst string, json_msg string) (error) {

    // Create connection to syslog server

    roots := x509.NewCertPool()

    ok := roots.AppendCertsFromPEM([]byte(rootPEM))

    if !ok {

        fmt.Println("failed to parse root certificate")

    }

    config := &tls.Config{RootCAs: roots, InsecureSkipVerify: true}

    conn, err := tls.Dial("tcp", siem_dst, config)

    if err != nil {

        fmt.Println("Error connecting SIEM")

        fmt.Println(err.Error())

    } else {

        // Send log message

        _, err = fmt.Fprintf(conn, json_msg)

        if err != nil {

            fmt.Println("Error sending SIEM message: ", json_msg)

            fmt.Println(err.Error())

        }

    }

    defer conn.Close()


    return err

}




func main() {


    // simplified code otherwise there would have been too much

    // but the 'devil' is this for loop

    for _, obj := range objects {


        // first check

        isSIEM := isDestinationSIEM(obj, siem_keys)

        if isSIEM {

           err := sendToSIEM(obj)

           if err != nil {

             // print error

           }


        isAUDIT:= isDestinationSIEM(obj)

        if isAUDIT {

           err := sendToAUDIT(obj)

           if err != nil {

             // print error

           }





    } // end of for



}

当“if isSIEM”返回错误时,不进行第二次检查“if isAUDIT”。为什么是这样?如果返回错误,循环是否从下一次迭代开始?


错误看起来像这样:运行时错误:无效的内存地址或 nil 指针取消引用:errorString(列出了几个 go 包)


猛跑小猪
浏览 157回答 1
1回答

暮色呼如

错误看起来像这样:运行时错误:无效的内存地址或 nil 指针取消引用:errorString(列出了几个 go 包)这意味着你抓住了panic()并且你的程序已经停止,这意味着你的圈子for也停止了。这里详细介绍了恐慌https://blog.golang.org/defer-panic-and-recover的工作原理
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go