У меня есть программа. Вот небольшой кусок кода.
type ModbusTCP struct {
Device Device
Client modbus.Client
Handler *modbus.TCPClientHandler
}
// Connect connect to the device
func (m *ModbusTCP) Connect(d Device) (err error) {
m.Device = d
cs := d.DParams.(map[string]interface{})["ip"].(string) +
":" + fmt.Sprintf("%.0f", d.DParams.(map[string]interface{})["port"].(float64))
handler := modbus.NewTCPClientHandler(cs)
handler.Timeout = 10 * time.Second
handler.SlaveId = 0xFF
err = handler.Connect()
if err != nil {
return errors.New("Fail to connect (" + cs + ") " + err.Error())
}
m.Handler = handler
return nil
}
// End connect to the device
func (m *ModbusTCP) End() {
LogDev("End connection", logrus.Fields{"id": m.Device.ID})
m.Handler.Close()
}
Это подготовка подключения к устрйсту по Модбас. Так что все работает, я открываю и закрываю соединение когда нужно. Но бывает такая ситуация что я могу вызвать End() а m.Handler уже пуст к тому времени.
Как мне проверить есть ли такой метод .Close() на хендлере перед тем как его вызвать?