code: func (p *Pinger) AddHandler(event string, handler interface{}) error {
  	switch event {
  	case "receive":
  		if hdl, ok := handler.(func(*net.IPAddr, time.Duration)); ok {
  			p.mu.Lock()
  			p.OnRecv = hdl
  			p.mu.Unlock()
  			return nil
  		}
  		return errors.New("receive event handler should be `func(*net.IPAddr, time.Duration)`")
  	case "idle":
  		if hdl, ok := handler.(func()); ok {
  			p.mu.Lock()
  			p.OnIdle = hdl
  			p.mu.Unlock()
  			return nil
  		}
  		return errors.New("idle event handler should be `func()`")
  	}
  	return errors.New("No such event: " + event)
  }
docs: // AddHandler adds event handler to Pinger. event arg should be "receive" or
  // "idle" string.
  //
  // **CAUTION** This function is deprecated. Please use OnRecv and OnIdle field
  // of Pinger struct to set following handlers.
  //
  // "receive" handler should be
  //
  //	func(addr *net.IPAddr, rtt time.Duration)
  //
  // type function. The handler is called with a response packet's source address
  // and its elapsed time when Pinger receives a response packet.
  //
  // "idle" handler should be
  //
  //	func()
  //
  // type function. The handler is called when MaxRTT time passed. For more
  // detail, please see Run() and RunLoop().