code: func destinations(svc *Service) ([]*Destination, error) {
  	msg, err := netlink.NewMessage(C.IPVS_CMD_GET_DEST, family, netlink.MFDump)
  	if err != nil {
  		return nil, err
  	}
  	defer msg.Free()
  
  	ic := &ipvsCommand{Service: newIPVSService(svc)}
  	if err := msg.Marshal(ic); err != nil {
  		return nil, err
  	}
  
  	var dsts []*Destination
  	cb := func(msg *netlink.Message, arg interface{}) error {
  		ic := &ipvsCommand{}
  		if err := msg.Unmarshal(ic); err != nil {
  			return fmt.Errorf("failed to unmarshal service: %v", err)
  		}
  		if ic.Destination == nil {
  			return errors.New("no destination in unmarshalled message")
  		}
  		dsts = append(dsts, ic.Destination.toDestination())
  		return nil
  	}
  	if err := msg.SendCallback(cb, nil); err != nil {
  		return nil, err
  	}
  	return dsts, nil
  }
docs: // destinations returns a list of destinations that are currently
  // configured in the kernel IPVS table for the specified service.