Как корректно закрывать tcp соединение?
Не отрабатывает вызов:defer conn.Close()
из-за бесконечного цикла.
Закрывай соединение в конце первого цикла conn.Close(), так как defer выполняется только при завершении метода.
.....
      d := time.Duration(kpi.current * float32(time.Second))
      time.Sleep(d)
    }//end for
    conn.Close()
    log.Println("error, when connect or receive data", stDesc, "wait 60seconds")
    time.Sleep(time.Minute) //Ждем 1 минуту, прежде чем выполнить повторное подключение
  }
}
Или сделать отдельный метод внутри первого цикла, в котором можно использовать defer conn.Close()