go lang + snmp in lool (ошибка обработки соединения) - PullRequest
2 голосов
/ 19 мая 2019

Я выполняю сервер на golnag, и мне нужно выполнить команду SNMP для многих устройств, некоторые из этих устройств не могут иметь соединения (или потеряли его временно) И я хочу сообщение "нет соединения" или "Ошибка" и затем продолжить выполнение программы

Ubuntu 18.04 // go 1.8 // go SNMP с https://github.com/soniah/gosnmp

package main

import (
    "fmt"
    "log"
    "time"
    g "github.com/soniah/gosnmp"
)

func main() {
    g.Default.Target = string("192.168.10.1")
    err := g.Default.Connect()
    if err != nil {
        log.Fatalf("Connect() err: %v", err)
        fmt.Println("Fail connection") // want this message in this case  !!!!!
    }
    defer g.Default.Conn.Close()

    oids := []string{"1.3.6.1.2.1.1.4.0", "1.3.6.1.2.1.1.7.0"} 
    result, err2 := g.Default.Get(oids)  
    if err2 != nil {
        log.Fatalf("Get() err: %v", err2)
        fmt.Println("Error read OID") // want this message in this case !!!!!
    }

    for i, variable := range result.Variables {
        fmt.Printf("%d: oid: %s ", i, variable.Name)

        switch variable.Type {
        case g.OctetString:
            fmt.Printf("string: %s\n", string(variable.Value.([]byte)))
        default:
            fmt.Printf("number: %d\n", g.ToBigInt(variable.Value))
        }
    }
}

я получаю этот результат, если нет соединения, и нарушаю ход пограмм

2019/05/19 15:11:33 Get() err: Request timeout (after 3 retries)
exit status 1

Я хочу что-то вроде этого

"Fail connection"   or  "Error read OID"

А затем я хочу продолжить выполнение программы

Ответы [ 2 ]

0 голосов
/ 24 мая 2019

@ Сергей Нарожный @ спасибо!И большая ошибка - это блок с обработкой «result.Variables».Нет результата, если у меня нет связи

0 голосов
/ 19 мая 2019

У вас есть недоступный код в строках, где вы оставили комментарии.

Просто используйте правильное строковое значение для log.Fatalf:

if err != nil {
  log.Fatalf("Fail connection, error: %v", err)
}

или если вы не хотите выходить:

if err != nil {
  log.Printf("Fail connection, error: %v", err)
}
...