code: func (k *Kite) GetKites(query *protocol.KontrolQuery) ([]*Client, error) {
  	if err := k.SetupKontrolClient(); err != nil {
  		return nil, err
  	}
  
  	clients, err := k.getKites(protocol.GetKitesArgs{Query: query})
  	if err != nil {
  		return nil, err
  	}
  
  	if len(clients) == 0 {
  		return nil, ErrNoKitesAvailable
  	}
  
  	return clients, nil
  }
docs: // GetKites returns the list of Kites matching the query. The returned list
  // contains Ready to connect Client instances. The caller must connect
  // with Client.Dial() before using each Kite. An error is returned when no
  // kites are available.
  //
  // The returned clients have token renewer running, which is leaked
  // when a single *Client is not closed. A handy utility to ease closing
  // the clients is a Close function:
  //
  //   clients, err := k.GetKites(&protocol.KontrolQuery{Name: "foo"})
  //   if err != nil {
  //       panic(err)
  //   }
  //
  //   // If we want to only use the first result and discard the rest,
  //   // we need to close the rest explicitly.
  //   defer kite.Close(clients[1:])
  //
  //   return clients[0]
  //